This post is also available in:
English
Oracle July 2020 Critical Patch Advisory changed objects performed by each database patch.
For more details and the catalog, check the main post: Dissecting 200714 BP, PSU, RU and RUR
What exactly changed for each?
(click to see detailed line changes)
- 11.2.0.4
- 12.1.0.2
- SYS.DBMS_RCVMAN – PACKAGE 12cR1 (PSU)
- SYS.DBMS_STATS – PACKAGE 12cR1 (PSU)
- SYS.DBMS_STATS – PACKAGE 12cR1 (BP)
- SYS.CDBVIEW – PACKAGE BODY 12cR1 (BP)
- SYS.DBMS_RCVMAN – PACKAGE BODY 12cR1 (BP)
- SYS.DBMS_RCVMAN – PACKAGE BODY 12cR1 (PSU)
- SYS.DBMS_STATS – PACKAGE BODY 12cR1 (PSU)
- SYS.DBMS_STATS – PACKAGE BODY 12cR1 (BP)
- SYS.SCHEDULER$_JOB_EVENT_HANDLER – PROCEDURE 12cR1 (BP)
- SYS.GV_$BACKUP_DATAFILE – VIEW 12cR1 (PSU)
- SYS.GV_$BACKUP_PIECE – VIEW 12cR1 (PSU)
- SYS.GV_$BACKUP_SET – VIEW 12cR1 (PSU)
- SYS.GV_$BACKUP_SPFILE – VIEW 12cR1 (PSU)
- SYS.GV_$DATAFILE_COPY – VIEW 12cR1 (PSU)
- SYS.GV_$PROXY_DATAFILE – VIEW 12cR1 (PSU)
- SYS.V_$BACKUP_DATAFILE – VIEW 12cR1 (PSU)
- SYS.V_$BACKUP_PIECE – VIEW 12cR1 (PSU)
- SYS.V_$BACKUP_SET – VIEW 12cR1 (PSU)
- SYS.V_$BACKUP_SPFILE – VIEW 12cR1 (PSU)
- SYS.V_$DATAFILE_COPY – VIEW 12cR1 (PSU)
- SYS.V_$PROXY_DATAFILE – VIEW 12cR1 (PSU)
- 12.2.0.1
- 18.0.0.0
- DVSYS.DBMS_MACADM – PACKAGE BODY 18c (RU)
- MDSYS.SDO_JOIN – FUNCTION 18c (RU)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 18c (18.10RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 18c (18.9RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 18c (RU)
- SYS.DBMS_REGISTRY – PACKAGE 18c (18.9RUR)
- SYS.DBMS_REGISTRY – PACKAGE 18c (18.10RUR)
- SYS.DBMS_REGISTRY – PACKAGE 18c (RU)
- SYS.DBMS_REPORT – PACKAGE 18c (RU)
- SYS.DBMS_SQLTUNE_UTIL2 – PACKAGE 18c (RU)
- SYS.PRVT_AWR_VIEWER – PACKAGE 18c (RU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 18c (18.9RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 18c (RU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 18c (18.10RUR)
- SYS.DBMS_REPORT – PACKAGE BODY 18c (RU)
- SYS.DBMS_SQLTUNE – PACKAGE BODY 18c (RU)
- SYS.DBMS_SQLTUNE_UTIL2 – PACKAGE BODY 18c (RU)
- SYS.PRVTEMX_PERF – PACKAGE BODY 18c (RU)
- SYS.PRVTEMX_RSRCMGR – PACKAGE BODY 18c (RU)
- SYS.PRVT_AWR_VIEWER – PACKAGE BODY 18c (RU)
- SYS.PRVT_AWRV_METADATA – TYPE BODY 18c (RU)
- SYS.WRI$_REPT_AWRV – TYPE BODY 18c (RU)
- 19.0.0.0
- CTXSYS.DRVDDL – PACKAGE BODY 19c (RU)
- DVSYS.DBMS_MACADM – PACKAGE BODY 19c (RU)
- MDSYS.SDO_JOIN – FUNCTION 19c (RU)
- MDSYS.MDPRVT_IDX – PACKAGE 19c (RU)
- MDSYS.PRVT_IDX – PACKAGE 19c (RU)
- MDSYS.SDO_IDX – PACKAGE 19c (RU)
- MDSYS.SDO_UTIL – PACKAGE 19c (RU)
- MDSYS.MDPRVT_GMD – PACKAGE BODY 19c (RU)
- MDSYS.MDPRVT_IDX – PACKAGE BODY 19c (RU)
- MDSYS.PRVT_PC – PACKAGE BODY 19c (RU)
- MDSYS.PRVT_SAM – PACKAGE BODY 19c (RU)
- MDSYS.SDOTNPC – PACKAGE BODY 19c (RU)
- MDSYS.SDO_3GL – PACKAGE BODY 19c (RU)
- MDSYS.SDO_CS – PACKAGE BODY 19c (RU)
- MDSYS.SDO_GEOM – PACKAGE BODY 19c (RU)
- MDSYS.SDO_GEOR – PACKAGE BODY 19c (RU)
- MDSYS.SDO_GEOR_AGGR – PACKAGE BODY 19c (RU)
- MDSYS.SDO_IDX – PACKAGE BODY 19c (RU)
- MDSYS.SDO_META – PACKAGE BODY 19c (RU)
- MDSYS.SDO_MIGRATE – PACKAGE BODY 19c (RU)
- MDSYS.SDO_PC_PKG – PACKAGE BODY 19c (RU)
- MDSYS.SDO_RDF_INTERNAL – PACKAGE BODY 19c (RU)
- MDSYS.SDO_SAM – PACKAGE BODY 19c (RU)
- MDSYS.SDO_TIN_PKG – PACKAGE BODY 19c (RU)
- MDSYS.SDO_TPIDX – PACKAGE BODY 19c (RU)
- MDSYS.SDO_TRKR – PACKAGE BODY 19c (RU)
- MDSYS.SDO_TUNE – PACKAGE BODY 19c (RU)
- MDSYS.SDO_UTIL – PACKAGE BODY 19c (RU)
- MDSYS.SDO_GEOM_TRIG_INS1 – TRIGGER 19c (RU)
- MDSYS.SDO_GEOM_TRIG_UPD1 – TRIGGER 19c (RU)
- MDSYS.SAMCLUST_IMP_T – TYPE BODY 19c (RU)
- MDSYS.SDO_INDEX_METHOD_10I – TYPE BODY 19c (RU)
- MDSYS.SPARQL_SERVICE_IMPL_T – TYPE BODY 19c (RU)
- MDSYS.ALL_SDO_GEOM_METADATA – VIEW 19c (RU)
- MDSYS.ALL_SDO_INDEX_METADATA – VIEW 19c (RU)
- MDSYS.MY_SDO_INDEX_METADATA – VIEW 19c (RU)
- MDSYS.USER_SDO_INDEX_METADATA – VIEW 19c (RU)
- SYS.DG$GETFLATDG – FUNCTION 19c (RU)
- SYS.DG$HASDGINDEX – FUNCTION 19c (RU)
- SYS.DBMS_ASH – PACKAGE 19c (RU)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 19c (19.7RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 19c (19.6RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 19c (RU)
- SYS.DBMS_HADOOP_INTERNAL – PACKAGE 19c (RU)
- SYS.DBMS_REGISTRY – PACKAGE 19c (19.6RUR)
- SYS.DBMS_REGISTRY – PACKAGE 19c (RU)
- SYS.DBMS_REGISTRY – PACKAGE 19c (19.7RUR)
- SYS.DBMS_SQLTUNE_UTIL2 – PACKAGE 19c (RU)
- SYS.PRVT_ASH_OMX – PACKAGE 19c (RU)
- SYS.PRVT_AWR_VIEWER – PACKAGE 19c (RU)
- SYS.PRVT_DBMS_INMEMORY_ADMIN – PACKAGE 19c (RU)
- SYS.DBMS_ASH – PACKAGE BODY 19c (RU)
- SYS.DBMS_AUTO_INDEX – PACKAGE BODY 19c (RU & 19.7RUR & 19.6RUR)
- SYS.DBMS_AUTO_INDEX_INTERNAL – PACKAGE BODY 19c (RU)
- SYS.DBMS_DBFS_CONTENT – PACKAGE BODY 19c (RU)
- SYS.DBMS_HADOOP – PACKAGE BODY 19c (RU)
- SYS.DBMS_HADOOP_INTERNAL – PACKAGE BODY 19c (RU)
- SYS.DBMS_ISCHED – PACKAGE BODY 19c (RU)
- SYS.DBMS_ISYNCREF – PACKAGE BODY 19c (RU)
- SYS.DBMS_LDAP – PACKAGE BODY 19c (RU)
- SYS.DBMS_PERF – PACKAGE BODY 19c (RU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 19c (19.6RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 19c (19.7RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 19c (RU)
- SYS.DBMS_SQLTUNE – PACKAGE BODY 19c (RU)
- SYS.DBMS_SQLTUNE_UTIL2 – PACKAGE BODY 19c (RU)
- SYS.PRVTEMX_PERF – PACKAGE BODY 19c (RU)
- SYS.PRVT_ASH_OMX – PACKAGE BODY 19c (RU)
- SYS.PRVT_AWR_VIEWER – PACKAGE BODY 19c (RU)
- SYS.DBMS_FEATURE_IMC – PROCEDURE 19c (RU)
- SYS.PRVT_AWRV_METADATA – TYPE BODY 19c (RU)
- SYS.WRI$_REPT_ASH_OMX – TYPE BODY 19c (RU)
- SYS.WRI$_REPT_AWRV – TYPE BODY 19c (RU)
- SYS.WRI$_REPT_PERF – TYPE BODY 19c (RU)
- SYS.WRI$_REPT_SESSION – TYPE BODY 19c (RU)
- SYS.DBA_WORKLOAD_CAPTURES – VIEW 19c (RU)
- SYS.INT$DBA_JSON_DATAGUIDES – VIEW 19c (RU)
- SYS.INT$DBA_JSON_DG_COLS – VIEW 19c (RU)
Changed Objects
P.S:
> = Added Lines
< = Removed Lines
11.2.0.4
6265,6278d6264 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 6318c6304,6316 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 6464c6462,6474 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
6265,6278d6264 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 6318c6304,6316 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 6464c6462,6474 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
12.1.0.2
1173a1174,1175 > PROCEDURE setGuid(guid IN varchar2 DEFAULT NULL); > 1981a1984,1988 > PROCEDURE translateProxyCopyGuid( > guid IN varchar2 > ,device_type IN varchar2 > ,statusMask IN binary_integer); > 2067a2075,2078 > > PROCEDURE translateBackupPieceGuid( > guid IN varchar2 > ,statusMask IN binary_integer);
2567,2568c2567,2569 < -- ownname or statid in the stattab; (2) statistics are locked; (3) < -- objects in the stattab no longer exist in the current database --- > -- ownname or statid in the stattab; (2) statistics are locked; > -- (3) objects in the stattab no longer exist in the current > -- database 2800,2803c2801,2804 < -- from partition level statistics. It will aggregate all statistics except number of < -- distinct values for columns and number of distinct keys of indexes. < -- The existing histograms of the columns at the table level < -- are also aggregated.The global statistics are gathered --- > -- from partition level statistics. It will aggregate all statistics > -- except number of distinct values for columns and number of distinct > -- keys of indexes. The existing histograms of the columns at the > -- table level are also aggregated. The global statistics are gathered 2810,2814c2811,2816 < -- This option is useful when you collect statistics for a new partition added < -- into a range partitioned table (for example, a table partitioned by month). < -- The new data in the partition makes the global statistics stale (especially < -- the min/max values of the partitioning column). This stale global statistics < -- may cause suboptimal plans. In this scenario, users can collect statistics --- > -- This option is useful when you collect statistics for a new > -- partition added into a range partitioned table (for example, a table > -- partitioned by month). The new data in the partition makes the > -- global statistics stale (especially the min/max values of the > -- partitioning column). This stale global statistics may cause > -- suboptimal plans. In this scenario, users can collect statistics 2816,2823c2818,2826 < -- option so that the global statistics will reflect the newly added range. < -- This option will take less time than 'GLOBAL AND PARTITION' option since the < -- global statistics are aggregated from underlying partition level statistics. < -- Note that, if you are using APPROX_GLOBAL AND PARTITION, < -- you still need to collect global statistics (with granularity = 'GLOBAL' option) < -- when there is substantial amount of change at the table level. < -- For example you added 10% more data to the table. This is needed to get the < -- correct number of distinct values/keys statistic at table level. --- > -- option so that the global statistics will reflect the newly added > -- range. This option will take less time than 'GLOBAL AND PARTITION' > -- option since the global statistics are aggregated from underlying > -- partition level statistics. Note that, if you are using > -- APPROX_GLOBAL AND PARTITION, you still need to collect global > -- statistics (with granularity = 'GLOBAL' option) when there is > -- substantial amount of change at the table level. For example you > -- added 10% more data to the table. This is needed to get the correct > -- number of distinct values/keys statistic at table level. 3018,3021c3021,3024 < -- obj_filter_list - a list of object filters. When provided, gather_schema_stats < -- will only gather statistics on the objects which satisfy at least one < -- object filter in the list as needed. Please refer to obj_filter_list < -- in gather_database_stats. --- > -- obj_filter_list - a list of object filters. When provided, > -- gather_schema_stats will only gather statistics on the objects which > -- satisfy at least one object filter in the list as needed. Please refer > -- to obj_filter_list in gather_database_stats. 3188,3201c3191,3204 < -- obj_filter_list - a list of object filters. When provided, gather_database_ < -- stats will only gather statistics on the objects which satisfy at least < -- one of the object filters as needed. < -- < -- In one single object filter, we can specify the constraints on the object < -- attributes. The attribute values specified in the object filter are case- < -- insensitive unless double-quoted. Wildcard is allowed in the attribute values. < -- Suppose non-null values s1, s2, ... are specified for attributes a1, a2, ... in < -- one object filter. An object o is said to satisfy this object filter if < -- (o.a1 like s1) and (o.a2 like s2) and ... is true. < -- The following example specifies that any table with a "SALES" prefix in the < -- SH schema and any table in the SYS schema, if stale, will be gathered. < -- Note that the statistics for the partitions of the tables also will be < -- gathered if they are stale. --- > -- obj_filter_list - a list of object filters. When provided, > -- gather_database_stats will only gather statistics on the objects which > -- satisfy at least one of the object filters as needed. > -- > -- In one single object filter, we can specify the constraints on the > -- object attributes. The attribute values specified in the object filter > -- are case-insensitive unless double-quoted. Wildcard is allowed in the > -- attribute values. Suppose non-null values s1, s2, ... are specified for > -- attributes a1, a2, ... in one object filter. An object o is said to > -- satisfy this object filter if (o.a1 like s1) and (o.a2 like s2) and ... > -- is true. The following example specifies that any table with a "SALES" > -- prefix in the SH schema and any table in the SYS schema, if stale, will > -- be gathered. Note that the statistics for the partitions of the tables > -- also will be gathered if they are stale. 3770,3773c3773,3776 < -- obj_filter_list - a list of object filters. When provided, gather_dictionary_ < -- stats will only gather statistics on the objects which satisfy at least < -- one of the object filters as needed. Please refer to obj_filter_list in < -- gather_database_stats --- > -- obj_filter_list - a list of object filters. When provided, > -- gather_dictionary_stats will only gather statistics on the objects which > -- satisfy at least one of the object filters as needed. Please refer to > -- obj_filter_list in gather_database_stats 4443,4448c4446,4452 < -- This function creates a column stats entry in the system for a user specified < -- column group or an expression in a table. Statistics for this extension will < -- be gathered when user or auto statistics gathering job gathers statistics for < -- the table. We call statistics for such an extension, "extended statistics". < -- This function returns the name of this newly created entry for the extension. < -- If the extension already exists then this function throws an error. --- > -- This function creates a column stats entry in the system for a user > -- specified column group or an expression in a table. Statistics for this > -- extension will be gathered when user or auto statistics gathering job > -- gathers statistics for the table. We call statistics for such an extension, > -- "extended statistics". This function returns the name of this newly created > -- entry for the extension. If the extension already exists then this function > -- throws an error. 4641,4648c4645,4652 < -- This procedure deletes the recorded column (group) usage information < -- from dictionary. Column (group) usage information is used by gather < -- procedures to automatically determine the columns that require histograms. < -- Also this information is used by create_extended_stats to create extensions < -- for the group of columns seen in the workload. So resetting column usage < -- will affect these functionalities. This procedure should be used only in very < -- rare cases where you need to start from scratch and need to seed < -- column usage all over again. --- > -- This procedure deletes the recorded column (group) usage information from > -- dictionary. Column (group) usage information is used by gather procedures to > -- automatically determine the columns that require histograms. Also this > -- information is used by create_extended_stats to create extensions for the > -- group of columns seen in the workload. So resetting column usage will affect > -- these functionalities. This procedure should be used only in very rare cases > -- where you need to start from scratch and need to seed column usage all over > -- again. 4665,4668c4669,4672 < -- ownname - owner name. If null it reports column usage information < -- for tables in all schemas in the database. < -- tabname - table name. If null, it reports column usage information < -- for all tables of ownname. --- > -- ownname - owner name. If null it reports column usage > -- information for tables in all schemas in the database. > -- tabname - table name. If null, it reports column usage > -- information for all tables of ownname. 4691c4695 < --............................................................................... --- > --............................................................................. 4693c4697 < --############################################################################### --- > --############################################################################# 4704c4708 < --############################################################################### --- > --############################################################################# 5009a5014,5025 > > -- For internal use > -- > -- Quickly estimate number of rows in the table for auto sampling > -- > function get_row_count_estimate( > ownname varchar2, -- table owner to select from > tabname varchar2, -- table name to select from > partname varchar2, -- table partition name > nblks integer, > degree integer > ) return number;
2559,2560c2559,2561 < -- ownname or statid in the stattab; (2) statistics are locked; (3) < -- objects in the stattab no longer exist in the current database --- > -- ownname or statid in the stattab; (2) statistics are locked; > -- (3) objects in the stattab no longer exist in the current > -- database 2792,2795c2793,2796 < -- from partition level statistics. It will aggregate all statistics except number of < -- distinct values for columns and number of distinct keys of indexes. < -- The existing histograms of the columns at the table level < -- are also aggregated.The global statistics are gathered --- > -- from partition level statistics. It will aggregate all statistics > -- except number of distinct values for columns and number of distinct > -- keys of indexes. The existing histograms of the columns at the > -- table level are also aggregated. The global statistics are gathered 2802,2806c2803,2808 < -- This option is useful when you collect statistics for a new partition added < -- into a range partitioned table (for example, a table partitioned by month). < -- The new data in the partition makes the global statistics stale (especially < -- the min/max values of the partitioning column). This stale global statistics < -- may cause suboptimal plans. In this scenario, users can collect statistics --- > -- This option is useful when you collect statistics for a new > -- partition added into a range partitioned table (for example, a table > -- partitioned by month). The new data in the partition makes the > -- global statistics stale (especially the min/max values of the > -- partitioning column). This stale global statistics may cause > -- suboptimal plans. In this scenario, users can collect statistics 2808,2815c2810,2818 < -- option so that the global statistics will reflect the newly added range. < -- This option will take less time than 'GLOBAL AND PARTITION' option since the < -- global statistics are aggregated from underlying partition level statistics. < -- Note that, if you are using APPROX_GLOBAL AND PARTITION, < -- you still need to collect global statistics (with granularity = 'GLOBAL' option) < -- when there is substantial amount of change at the table level. < -- For example you added 10% more data to the table. This is needed to get the < -- correct number of distinct values/keys statistic at table level. --- > -- option so that the global statistics will reflect the newly added > -- range. This option will take less time than 'GLOBAL AND PARTITION' > -- option since the global statistics are aggregated from underlying > -- partition level statistics. Note that, if you are using > -- APPROX_GLOBAL AND PARTITION, you still need to collect global > -- statistics (with granularity = 'GLOBAL' option) when there is > -- substantial amount of change at the table level. For example you > -- added 10% more data to the table. This is needed to get the correct > -- number of distinct values/keys statistic at table level. 3010,3013c3013,3016 < -- obj_filter_list - a list of object filters. When provided, gather_schema_stats < -- will only gather statistics on the objects which satisfy at least one < -- object filter in the list as needed. Please refer to obj_filter_list < -- in gather_database_stats. --- > -- obj_filter_list - a list of object filters. When provided, > -- gather_schema_stats will only gather statistics on the objects which > -- satisfy at least one object filter in the list as needed. Please refer > -- to obj_filter_list in gather_database_stats. 3180,3193c3183,3196 < -- obj_filter_list - a list of object filters. When provided, gather_database_ < -- stats will only gather statistics on the objects which satisfy at least < -- one of the object filters as needed. < -- < -- In one single object filter, we can specify the constraints on the object < -- attributes. The attribute values specified in the object filter are case- < -- insensitive unless double-quoted. Wildcard is allowed in the attribute values. < -- Suppose non-null values s1, s2, ... are specified for attributes a1, a2, ... in < -- one object filter. An object o is said to satisfy this object filter if < -- (o.a1 like s1) and (o.a2 like s2) and ... is true. < -- The following example specifies that any table with a "SALES" prefix in the < -- SH schema and any table in the SYS schema, if stale, will be gathered. < -- Note that the statistics for the partitions of the tables also will be < -- gathered if they are stale. --- > -- obj_filter_list - a list of object filters. When provided, > -- gather_database_stats will only gather statistics on the objects which > -- satisfy at least one of the object filters as needed. > -- > -- In one single object filter, we can specify the constraints on the > -- object attributes. The attribute values specified in the object filter > -- are case-insensitive unless double-quoted. Wildcard is allowed in the > -- attribute values. Suppose non-null values s1, s2, ... are specified for > -- attributes a1, a2, ... in one object filter. An object o is said to > -- satisfy this object filter if (o.a1 like s1) and (o.a2 like s2) and ... > -- is true. The following example specifies that any table with a "SALES" > -- prefix in the SH schema and any table in the SYS schema, if stale, will > -- be gathered. Note that the statistics for the partitions of the tables > -- also will be gathered if they are stale. 3762,3765c3765,3768 < -- obj_filter_list - a list of object filters. When provided, gather_dictionary_ < -- stats will only gather statistics on the objects which satisfy at least < -- one of the object filters as needed. Please refer to obj_filter_list in < -- gather_database_stats --- > -- obj_filter_list - a list of object filters. When provided, > -- gather_dictionary_stats will only gather statistics on the objects which > -- satisfy at least one of the object filters as needed. Please refer to > -- obj_filter_list in gather_database_stats 4435,4440c4438,4444 < -- This function creates a column stats entry in the system for a user specified < -- column group or an expression in a table. Statistics for this extension will < -- be gathered when user or auto statistics gathering job gathers statistics for < -- the table. We call statistics for such an extension, "extended statistics". < -- This function returns the name of this newly created entry for the extension. < -- If the extension already exists then this function throws an error. --- > -- This function creates a column stats entry in the system for a user > -- specified column group or an expression in a table. Statistics for this > -- extension will be gathered when user or auto statistics gathering job > -- gathers statistics for the table. We call statistics for such an extension, > -- "extended statistics". This function returns the name of this newly created > -- entry for the extension. If the extension already exists then this function > -- throws an error. 4633,4640c4637,4644 < -- This procedure deletes the recorded column (group) usage information < -- from dictionary. Column (group) usage information is used by gather < -- procedures to automatically determine the columns that require histograms. < -- Also this information is used by create_extended_stats to create extensions < -- for the group of columns seen in the workload. So resetting column usage < -- will affect these functionalities. This procedure should be used only in very < -- rare cases where you need to start from scratch and need to seed < -- column usage all over again. --- > -- This procedure deletes the recorded column (group) usage information from > -- dictionary. Column (group) usage information is used by gather procedures to > -- automatically determine the columns that require histograms. Also this > -- information is used by create_extended_stats to create extensions for the > -- group of columns seen in the workload. So resetting column usage will affect > -- these functionalities. This procedure should be used only in very rare cases > -- where you need to start from scratch and need to seed column usage all over > -- again. 4657,4660c4661,4664 < -- ownname - owner name. If null it reports column usage information < -- for tables in all schemas in the database. < -- tabname - table name. If null, it reports column usage information < -- for all tables of ownname. --- > -- ownname - owner name. If null it reports column usage > -- information for tables in all schemas in the database. > -- tabname - table name. If null, it reports column usage > -- information for all tables of ownname. 4683c4687 < --............................................................................... --- > --............................................................................. 4685c4689 < --############################################################################### --- > --############################################################################# 4696c4700 < --############################################################################### --- > --############################################################################# 5001a5006,5017 > > -- For internal use > -- > -- Quickly estimate number of rows in the table for auto sampling > -- > function get_row_count_estimate( > ownname varchar2, -- table owner to select from > tabname varchar2, -- table name to select from > partname varchar2, -- table partition name > nblks integer, > degree integer > ) return number;
119a120 > ownerId number; 125,129c126,132 < execute immediate 'SELECT COUNT(*) FROM USER$ WHERE NAME = :1' < into cCheck using upper(owner); < if (cCheck = 0) then < RETURN FALSE; < end if; --- > -- USER$ contains both users and roles, exclude roles from the check > begin > execute immediate 'SELECT USER# FROM USER$ WHERE TYPE# = 1 AND NAME = :1' > into ownerId using upper(owner); > exception > when no_data_found then return false; > end; 131,137c134,146 < -- Check if oldview already exist < execute immediate 'SELECT COUNT(*) FROM OBJ$ WHERE NAME = :1' || < ' AND (TYPE# = 4 OR TYPE# = 2)' < into cCheck using upper(oldview); < if (cCheck = 0) then < RETURN FALSE; < end if; --- > -- Check if oldview already exist, qualify with owner# to avoid ORA-1422 > -- error,if two dictionary view with the same name exists across different > -- schemas like DBA_DV_STATUS which exists in both SYS and DVSYS schemas. > -- Bug 29339155: Check for remoteowner being null to avoid ORA-1422 error > -- if there were remote PL/SQL objects depending on oldview. > begin > execute immediate 'SELECT 1 FROM OBJ$ WHERE NAME = :1' || > ' AND TYPE# in (2, 4) and owner# = :2' || > ' AND REMOTEOWNER is null' > into cCheck using upper(oldview), ownerId; > exception > when no_data_found then return false; > end;
7446,7459d7445 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7499c7485,7497 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 7654c7652,7664 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
422a423,424 > GUIDQUALIFIER VARCHAR2(32); > 1204a1207 > AND (GUIDQUALIFIER IS NULL OR GUID = GUIDQUALIFIER) 1312a1316 > AND (GUIDQUALIFIER IS NULL OR GUID = GUIDQUALIFIER) 1420a1425 > AND (GUIDQUALIFIER IS NULL OR BS.GUID = GUIDQUALIFIER) 1532a1538 > AND (GUIDQUALIFIER IS NULL OR BS.GUID = GUIDQUALIFIER) 1643a1650 > AND (GUIDQUALIFIER IS NULL OR BS.GUID = GUIDQUALIFIER) 2029a2037 > AND (GUIDQUALIFIER IS NULL OR DC.GUID = GUIDQUALIFIER) 2166a2175 > AND (GUIDQUALIFIER IS NULL OR GUID = GUIDQUALIFIER) 2294a2304 > AND (GUIDQUALIFIER IS NULL OR BS.GUID = GUIDQUALIFIER) 2574c2584,2586 < ,STATUSMASK IN BINARY_INTEGER) --- > ,STATUSMASK IN BINARY_INTEGER > ,PDBKEY IN NUMBER DEFAULT NULL > ,GUID IN VARCHAR2 DEFAULT NULL) 2668a2681,2682 > AND (FINDPROXYCOPY.GUID IS NULL OR > FINDPROXYCOPY.GUID = GUID) 2757a2772 > AND (FINDPROXYCOPY.GUID IS NULL) 3773c3788,3790 < ,STATUSMASK IN BINARY_INTEGER) --- > ,STATUSMASK IN BINARY_INTEGER > ,PDBKEY IN NUMBER DEFAULT NULL > ,GUID IN VARCHAR2 DEFAULT NULL) 3812a3830,3831 > AND (FINDBACKUPPIECE_C.GUID IS NULL OR > FINDBACKUPPIECE_C.GUID = BS.GUID) 4804c4823,4825 < FROM X$KCCDC DC, V$CONTAINERS PDB --- > FROM X$KCCDC DC > LEFT OUTER JOIN V$CONTAINERS PDB > ON DC.CON_ID = PDB.CON_ID 4807d4827 < AND DC.CON_ID = PDB.CON_ID 4847c4867,4869 < FROM X$KCCBF BF, V$CONTAINERS PDB --- > FROM X$KCCBF BF > LEFT OUTER JOIN V$CONTAINERS PDB > ON BF.CON_ID = PDB.CON_ID 4850d4871 < AND BF.CON_ID = PDB.CON_ID 4890c4911,4913 < FROM X$KCCPD PD, V$CONTAINERS PDB --- > FROM X$KCCPD PD > LEFT OUTER JOIN V$CONTAINERS PDB > ON PD.CON_ID = PDB.CON_ID 4893d4915 < AND PD.CON_ID = PDB.CON_ID 5011c5033,5035 < FROM X$KCCDC DC, V$CONTAINERS PDB --- > FROM X$KCCDC DC > LEFT OUTER JOIN V$CONTAINERS PDB > ON DC.CON_ID = PDB.CON_ID 5014,5015c5038 < AND DC.CON_ID = PDB.CON_ID < AND PDB.CON_ID = TRANSLATEALLDFOFPDBID_C.PDBID --- > AND DC.CON_ID = TRANSLATEALLDFOFPDBID_C.PDBID 5055c5078,5080 < FROM X$KCCBF BF, V$CONTAINERS PDB --- > FROM X$KCCBF BF > LEFT OUTER JOIN V$CONTAINERS PDB > ON BF.CON_ID = PDB.CON_ID 5058,5059c5083 < AND BF.CON_ID = PDB.CON_ID < AND PDB.CON_ID = TRANSLATEALLDFOFPDBID_C.PDBID --- > AND BF.CON_ID = TRANSLATEALLDFOFPDBID_C.PDBID 5099c5123,5125 < FROM X$KCCPD PD, V$CONTAINERS PDB --- > FROM X$KCCPD PD > LEFT OUTER JOIN V$CONTAINERS PDB > ON PD.CON_ID = PDB.CON_ID 5102,5103c5128 < AND PD.CON_ID = PDB.CON_ID < AND PDB.CON_ID = TRANSLATEALLDFOFPDBID_C.PDBID --- > AND PD.CON_ID = TRANSLATEALLDFOFPDBID_C.PDBID 5220c5245,5247 < FROM X$KCCDC DC, V$CONTAINERS PDB --- > FROM X$KCCDC DC > LEFT OUTER JOIN V$CONTAINERS PDB > ON DC.CON_ID = PDB.CON_ID 5223,5224c5250 < AND DC.CON_ID = PDB.CON_ID < AND ISTRANSLATEDPDBID(PDB.CON_ID) = TRUE# --- > AND ISTRANSLATEDPDBID(DC.CON_ID) = TRUE# 5264c5290,5292 < FROM X$KCCBF BF, V$CONTAINERS PDB --- > FROM X$KCCBF BF > LEFT OUTER JOIN V$CONTAINERS PDB > ON BF.CON_ID = PDB.CON_ID 5267,5268c5295 < AND BF.CON_ID = PDB.CON_ID < AND ISTRANSLATEDPDBID(PDB.CON_ID) = TRUE# --- > AND ISTRANSLATEDPDBID(BF.CON_ID) = TRUE# 5308c5335,5337 < FROM X$KCCPD PD, V$CONTAINERS PDB --- > FROM X$KCCPD PD > LEFT OUTER JOIN V$CONTAINERS PDB > ON PD.CON_ID = PDB.CON_ID 5311,5312c5340 < AND PD.CON_ID = PDB.CON_ID < AND ISTRANSLATEDPDBID(PDB.CON_ID) = TRUE# --- > AND ISTRANSLATEDPDBID(PD.CON_ID) = TRUE# 7368,7381d7395 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7421c7435,7447 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 7576c7602,7614 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 13409c13447,13449 < ,STARTBSKEY IN NUMBER DEFAULT NULL) --- > ,STARTBSKEY IN NUMBER DEFAULT NULL > ,PDBKEY IN NUMBER DEFAULT NULL > ,GUID IN VARCHAR2 DEFAULT NULL) 13445c13485,13487 < STATUSMASK => STATUSMASK); --- > STATUSMASK => STATUSMASK, > PDBKEY => PDBKEY, > GUID => GUID); 15531a15574 > SETGUID(NULL); 21842a21886,21909 > PROCEDURE TRANSLATEPROXYCOPYGUID( > GUID IN VARCHAR2 > ,DEVICE_TYPE IN VARCHAR2 > ,STATUSMASK IN BINARY_INTEGER) > IS > PDBKEY NUMBER := NULL; > BEGIN > DEB(DEB_ENTER, 'translateProxyCopyGuid'); > VALIDATESTATE(GETPROXYCOPYCURSOR); > DEB(DEB_OPEN, 'findProxyCopy'); > > > OPEN FINDPROXYCOPY(PDBKEY => PDBKEY, > GUID => GUID, > DEVICETYPE => DEVICE_TYPE, > STATUSMASK => NVL(STATUSMASK, 0)); > GETPROXYCOPYCURSOR := 'findProxyCopy'; > GETPROXYCOPYNOROWS.ERROR := -20310; > GETPROXYCOPYNOROWS.MSG := 'no matching proxy copy found'; > GETPROXYCOPYBYHANDLE := FALSE; > DEB(DEB_EXIT); > END TRANSLATEPROXYCOPYGUID; > > 22209a22277,22293 > > PROCEDURE TRANSLATEBACKUPPIECEGUID( > GUID IN VARCHAR2 > ,STATUSMASK IN BINARY_INTEGER) > IS > PDBKEY NUMBER := NULL; > BEGIN > DEB(DEB_ENTER, 'translateBackupPieceGuid'); > > > FINDBACKUPPIECE(PDBKEY => PDBKEY, > GUID => GUID, > STATUSMASK => NVL(STATUSMASK, 0)); > DEB(DEB_EXIT); > END TRANSLATEBACKUPPIECEGUID; > > 22941a23026,23034 > > IF (GUIDQUALIFIER IS NOT NULL) THEN > IF (FINDARCHIVEDLOGCOPY%ISOPEN) THEN > CLOSE FINDARCHIVEDLOGCOPY; > END IF; > DEB(DEB_EXIT, 'guid not valid for archivelog'); > RAISE NO_DATA_FOUND; > END IF; > 23345a23439,23448 > > > IF (GUIDQUALIFIER IS NOT NULL) THEN > IF (FINDARCLOGBACKUP%ISOPEN) THEN > CLOSE FINDARCLOGBACKUP; > END IF; > DEB(DEB_EXIT, 'guid not valid for archivelog'); > RAISE NO_DATA_FOUND; > END IF; > 23731a23835,23843 > > IF (GUIDQUALIFIER IS NOT NULL) THEN > IF (FINDARCLOGBACKUP%ISOPEN) THEN > CLOSE FINDARCLOGBACKUP; > END IF; > DEB(DEB_EXIT, 'guid not valid for archivelog'); > RAISE NO_DATA_FOUND; > END IF; > 28605a28718,28725 > > > PROCEDURE SETGUID( > GUID IN VARCHAR2 DEFAULT NULL) > IS > BEGIN > GUIDQUALIFIER := GUID; > END SETGUID;
1222,1232c1222,1232
< SUCCEEDED INTEGER := 0,
< FAILED INTEGER := 0,
< STOPPED INTEGER := 0,
< STARTED INTEGER := 0,
< SCHEDULED INTEGER := 0,
<
<
< LASTJOB VARCHAR(30),
< LASTEVENT SCHEDULER$_EVENT_INFO,
< SOFAR_PART INTEGER := 0,
< SOFAR_SUBPART INTEGER := 0
---
> SUCCEEDED INTEGER := 0,
> FAILED INTEGER := 0,
> STOPPED INTEGER := 0,
> STARTED INTEGER := 0,
> SCHEDULED INTEGER := 0,
>
>
> LASTJOB VARCHAR(30),
> LASTEVENT SCHEDULER$_EVENT_INFO,
> SOFAR_PART INTEGER := 0,
> SOFAR_SUBPART INTEGER := 0
1235a1236
>
1259c1260,1261
< TOP_LEVEL BOOLEAN,
---
> TOP_LEVEL BOOLEAN,
>
1789a1792
>
2249c2252,2254
< FUNCTION CHECK_GRANULARITY(GRANULARITY VARCHAR2, GRANCHK VARCHAR2) RETURN BOOLEAN;
---
> FUNCTION CHECK_GRANULARITY(GRANULARITY VARCHAR2,
> GRANCHK VARCHAR2) RETURN BOOLEAN;
>
2253a2259
>
2255,2258c2261,2266
< JSTATS IN OUT NOCOPY JOBSTATSREC,
< JOBSTAB IN OUT NOCOPY VARCHARTAB, ANAME VARCHAR2, LOPSTR VARCHAR2,
< EXCEPTIONPOLICY BINARY_INTEGER DEFAULT DSC_ABSORB,
< RETURNPOLICY BINARY_INTEGER DEFAULT DSC_WAIT_FOR_ALL);
---
> JSTATS IN OUT NOCOPY JOBSTATSREC,
> JOBSTAB IN OUT NOCOPY VARCHARTAB,
> ANAME VARCHAR2, LOPSTR VARCHAR2,
> EXCEPTIONPOLICY BINARY_INTEGER DEFAULT DSC_ABSORB,
> RETURNPOLICY BINARY_INTEGER
> DEFAULT DSC_WAIT_FOR_ALL);
3304c3312,3314
< TSTATS(I).TAB || ' . ' || TSTATS(I).PART || ' . ' || TSTATS(I).SPART);
---
> TSTATS(I).TAB || ' . ' ||
> TSTATS(I).PART || ' . ' ||
> TSTATS(I).SPART);
3315c3325,3327
< ISTATS(I).IND || ' . ' || ISTATS(I).PART || ' . ' || ISTATS(I).SPART);
---
> ISTATS(I).IND || ' . ' ||
> ISTATS(I).PART || ' . ' ||
> ISTATS(I).SPART);
3929c3941,3942
< RAISE_APPLICATION_ERROR(-20001, 'DBMS_STATS: str2bool: invalid boolean value.');
---
> RAISE_APPLICATION_ERROR(-20001,
> 'DBMS_STATS: str2bool: invalid boolean value.');
4281c4294,4295
< IF(TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes')) < 4) THEN
---
> IF(TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes'))
> < 4) THEN
5433c5447,5448
< JOB_CLASS_NAME => DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX,
---
> JOB_CLASS_NAME => DSC_STATS_COLLECTION_JOB_CLASS || '_' ||
> SUFFIX,
5577c5592,5593
< TRACE_ERROR('exception in monitoring_man_drop_agent: ' || ': ' || SQLERRM );
---
> TRACE_ERROR('exception in monitoring_man_drop_agent: ' || ': ' ||
> SQLERRM );
5602a5619
>
5625,5627c5642,5645
< TRACE_ERROR('exception in monitoring_man_subscribe_agent: ' || SQLERRM);
< RAISE_APPLICATION_ERROR(-20001, 'monitoring_man_subscribe_agent: ' || ANAME ||
< ': ' || SQLERRM );
---
> TRACE_ERROR('exception in monitoring_man_subscribe_agent: ' ||
> SQLERRM);
> RAISE_APPLICATION_ERROR(-20001, 'monitoring_man_subscribe_agent: ' ||
> ANAME || ': ' || SQLERRM );
5653c5671,5672
< PROCEDURE JOB_MAN_PERFORM_CLEANUPS(FORCE BOOLEAN, DROP_JOB BOOLEAN, SUFFIX VARCHAR2,
---
> PROCEDURE JOB_MAN_PERFORM_CLEANUPS(FORCE BOOLEAN, DROP_JOB BOOLEAN,
> SUFFIX VARCHAR2,
5662,5663c5681,5683
< TRACE_TABLE('Perform Cleanups... ' || DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX
< || ' force: ' || BOOL2STR(FORCE) || ' drop_job: ' || BOOL2STR(DROP_JOB));
---
> TRACE_TABLE('Perform Cleanups... ' || DSC_STATS_COLLECTION_JOB_CLASS ||
> '_' || SUFFIX || ' force: ' || BOOL2STR(FORCE) ||
> ' drop_job: ' || BOOL2STR(DROP_JOB));
5679c5699,5700
< JOB_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX,
---
> JOB_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS ||
> '_' || SUFFIX,
5699c5720,5721
< JOB_CLASS_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX);
---
> JOB_CLASS_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS ||
> '_' || SUFFIX);
5702a5725
>
5763c5786,5787
< TRACE_ERROR('exception in monitoring_man_process_event: ' || ': ' || SQLERRM);
---
> TRACE_ERROR('exception in monitoring_man_process_event: ' || ': ' ||
> SQLERRM);
5780c5804,5805
< PROCEDURE GET_JOB_STATS(JOBSTAB IN OUT NOCOPY VARCHARTAB, JSTATS IN OUT NOCOPY JOBSTATSREC)
---
> PROCEDURE GET_JOB_STATS(JOBSTAB IN OUT NOCOPY VARCHARTAB,
> JSTATS IN OUT NOCOPY JOBSTATSREC)
5815a5841
>
5873a5900,5904
>
>
>
>
>
5876c5907,5908
< JOBSTAB IN OUT NOCOPY VARCHARTAB, ANAME VARCHAR2, LOPSTR VARCHAR2,
---
> JOBSTAB IN OUT NOCOPY VARCHARTAB, ANAME VARCHAR2,
> LOPSTR VARCHAR2,
5878c5910
< RETURNPOLICY BINARY_INTEGER DEFAULT DSC_WAIT_FOR_ALL)
---
> RETURNPOLICY BINARY_INTEGER DEFAULT DSC_WAIT_FOR_ALL)
5898,5899c5930,5932
< TRACE_TABLE(ANAME || ': waiting for jobs in wait_for_jobs...* '
< || TO_CHAR(JOBSTAB.COUNT - (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED)));
---
> TRACE_TABLE(ANAME || ': waiting for jobs in wait_for_jobs...* ' ||
> TO_CHAR(JOBSTAB.COUNT -
> (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED)));
5910c5943,5944
< DEQUEUE_OPTIONS.DEQ_CONDITION := 'tab.user_data.object_name like ''' || JOB_NAME_PREFIX || '%''';
---
> DEQUEUE_OPTIONS.DEQ_CONDITION := 'tab.user_data.object_name like ''' ||
> JOB_NAME_PREFIX || '%''';
5913c5947,5948
< WHILE (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED) < JOBSTAB.COUNT LOOP
---
> WHILE (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED) <
> JOBSTAB.COUNT LOOP
5921a5957
>
5922a5959
>
5928a5966
>
5957c5995,5996
< TRACE_TABLE(' >> process event: ' || MESSAGE.OBJECT_NAME || ' > ' || MESSAGE.EVENT_TYPE ||
---
> TRACE_TABLE(' >> process event: ' || MESSAGE.OBJECT_NAME || ' > ' ||
> MESSAGE.EVENT_TYPE ||
5966c6005,6006
< TRACE_TABLE(' *** Failure Event: ' || MESSAGE.ERROR_CODE || ': ' || MESSAGE.ERROR_MSG);
---
> TRACE_TABLE(' *** Failure Event: ' || MESSAGE.ERROR_CODE || ': ' ||
> MESSAGE.ERROR_MSG);
5969c6009,6010
< RAISE_APPLICATION_ERROR(-20000, 'insufficient privileges to analyze an object.');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'insufficient privileges to analyze an object.');
6004c6045,6046
< DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(PROGRESSREC.RINDEX, PROGRESSREC.SLNO,
---
> DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(PROGRESSREC.RINDEX,
> PROGRESSREC.SLNO,
6026c6068,6070
< TRACE_ERROR(JOB_NAME_PREFIX ||': exception in monitoring_man_wait_for_jobs: ' || ': ' || SQLERRM );
---
> TRACE_ERROR(JOB_NAME_PREFIX ||
> ': exception in monitoring_man_wait_for_jobs: ' || ': ' ||
> SQLERRM );
6398a6443,6462
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
6488,6493c6552,6559
< TRACE_ERROR('Exception while creating job ' || JOBNAME || ' for table(s) ' ||
< COMMENTS || ' at ' || SYSTIMESTAMP ||
< ' jobsTab.count: ' || TO_CHAR(JOBSTAB.COUNT) || ': ' || SQLERRM );
< RAISE_APPLICATION_ERROR(-20001, 'Exception while creating job ' || JOBNAME || ' for table(s) ' ||
< COMMENTS || ' at ' || SYSTIMESTAMP ||
< ' jobsTab.count: ' || TO_CHAR(JOBSTAB.COUNT) || ': ' || SQLERRM);
---
> TRACE_ERROR('Exception while creating job ' || JOBNAME ||
> ' for table(s) ' || COMMENTS || ' at ' || SYSTIMESTAMP ||
> ' jobsTab.count: ' || TO_CHAR(JOBSTAB.COUNT) || ': ' ||
> SQLERRM );
> RAISE_APPLICATION_ERROR(-20001, 'Exception while creating job ' ||
> JOBNAME || ' for table(s) ' || COMMENTS ||
> ' at ' || SYSTIMESTAMP || ' jobsTab.count: ' ||
> TO_CHAR(JOBSTAB.COUNT) || ': ' || SQLERRM);
6513a6580,6581
>
>
7671c7739,7743
< PROCEDURE URGENT_CLEANUP(JOBSTAB IN OUT NOCOPY VARCHARTAB, JOB_CLASS_SUFFIX VARCHAR2,
---
>
>
>
> PROCEDURE URGENT_CLEANUP(JOBSTAB IN OUT NOCOPY VARCHARTAB,
> JOB_CLASS_SUFFIX VARCHAR2,
7678c7750,7751
< CLASS_SUFFIX DBMS_QUOTED_ID := DBMS_ASSERT_SIMPLE_SQL_NAME(JOB_CLASS_SUFFIX);
---
> CLASS_SUFFIX DBMS_QUOTED_ID :=
> DBMS_ASSERT_SIMPLE_SQL_NAME(JOB_CLASS_SUFFIX);
7696c7769,7770
< select owner ||'.' || job_name name from dba_scheduler_jobs
---
> select owner ||'.' || job_name name
> from dba_scheduler_jobs
7699c7773,7774
< select job_class_name name from dba_scheduler_job_classes
---
> select job_class_name name
> from dba_scheduler_job_classes
7722c7797,7798
< dbms_scheduler.stop_job(job_name=>rec.name, force=>true);
---
> dbms_scheduler.stop_job(job_name=>rec.name,
> force=>true);
7739c7815,7816
< dbms_scheduler.drop_job(job_name=>rec.name, force=>true);
---
> dbms_scheduler.drop_job(job_name=>rec.name,
> force=>true);
7749c7826,7827
< dbms_scheduler.drop_job_class(job_class_name=>rec.name, force=>true);
---
> dbms_scheduler.drop_job_class(job_class_name=>rec.name,
> force=>true);
7758,7760c7836,7841
< subscriber := sys.aq$_agent (rec.name, 'sys.scheduler$_event_queue', null);
< dbms_aqadm.remove_subscriber('sys.scheduler$_event_queue', subscriber);
< dbms_aqadm.drop_aq_agent (rec.name);
---
> subscriber := sys.aq$_agent (rec.name,
> 'sys.scheduler$_event_queue',
> null);
> dbms_aqadm.remove_subscriber('sys.scheduler$_event_queue',
> subscriber);
> dbms_aqadm.drop_aq_agent (rec.name);
7786c7867,7868
< TRACE_TABLE('Created Cleanup Job ' || LOC_JOB_NAME || ' at ' || SYSTIMESTAMP);
---
> TRACE_TABLE('Created Cleanup Job ' || LOC_JOB_NAME || ' at ' ||
> SYSTIMESTAMP);
7848a7931
>
7850c7933
< RES := MONITORING_MAN_SUBSCRIBE_AGENT(JOB_NAME_PREFIX, USERNAMEU);
---
> RES := MONITORING_MAN_SUBSCRIBE_AGENT(JOB_NAME_PREFIX, USERNAMEU);
7856c7939,7940
< TRACE_ERROR('Silent exception in init_conc: agent subscription has failed');
---
> TRACE_ERROR(
> 'Silent exception in init_conc: agent subscription has failed');
7910a7995,7997
>
>
>
7953c8040
< PROP := DBMS_STATS_INTERNAL.GET_TAB_PROPERTY(OWNER, TABNAME);
---
> PROP := DBMS_STATS_INTERNAL.GET_TAB_PROPERTY(OWNER, TABNAME);
7962c8049,8050
< NOT (BITAND(PROP, 4194304) = 4194304 OR BITAND(PROP, 8388608) = 8388608)
---
> NOT (BITAND(PROP, 4194304) = 4194304 OR BITAND(PROP, 8388608) =
> 8388608)
7992c8080,8081
< LOC_JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(DSC_JOB_PREF || 'T');
---
> LOC_JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(
> DSC_JOB_PREF || 'T');
7998c8087
< IF(IS_NULL(BATCHING_JOB_PREFIX) AND IS_NULL(JOB_NAME_PREFIX)) THEN
---
> IF(IS_NULL(BATCHING_JOB_PREFIX) AND IS_NULL(JOB_NAME_PREFIX)) THEN
8001c8090,8091
< TRACE_TABLE('Disabling concurrency as initializations have failed');
---
> TRACE_TABLE(
> 'Disabling concurrency as initializations have failed');
8009,8010c8099,8101
< JOB_MAN_PERFORM_CLEANUPS(TRUE, FALSE, BATCHING_JOB_PREFIX, CONCTX.JOBSTAB,
< TRUE, TRUE);
---
>
> JOB_MAN_PERFORM_CLEANUPS(TRUE, FALSE, BATCHING_JOB_PREFIX,
> CONCTX.JOBSTAB, TRUE, TRUE);
8132c8223,8224
< (OWNER VARCHAR2, OBJNAMEU IN OUT NOCOPY VARCHAR2, OBJTYPE BINARY_INTEGER) IS
---
> (OWNER VARCHAR2, OBJNAMEU IN OUT NOCOPY VARCHAR2, OBJTYPE BINARY_INTEGER)
> IS
8774c8866
< DBMS_STATS_INTERNAL.PART_TYPES(OWNNAME, OBJNAME, OBJTYPE, PTYPE, SPTYPE);
---
> DBMS_STATS_INTERNAL.PART_TYPES(OWNNAME, OBJNAME, OBJTYPE, PTYPE, SPTYPE);
8823a8916,8917
>
>
9149c9243,9244
< STATS_CHECK_PRIVILEGES(OWNER, TREC.OBJ_NAME, DSC_KGLNTABL, FALSE, NULL);
---
> STATS_CHECK_PRIVILEGES(OWNER, TREC.OBJ_NAME, DSC_KGLNTABL, FALSE,
> NULL);
9316c9411
< DBMS_ASSERT.SIMPLE_SQL_NAME(DBMS_STATS_INTERNAL.DQ(COL.PCNAME));
---
> DBMS_ASSERT.SIMPLE_SQL_NAME(DBMS_STATS_INTERNAL.DQ(COL.PCNAME));
9579,9580c9674,9675
< CONVERT_FROM_RAW_ICD(DSC_DTYIBFLOAT, RAWVAL, CVAL, DVAL, NVAL, NCVAL, RWVAL,
< RESVAL, BDVAL);
---
> CONVERT_FROM_RAW_ICD(DSC_DTYIBFLOAT, RAWVAL, CVAL, DVAL, NVAL, NCVAL,
> RWVAL, RESVAL, BDVAL);
9595,9596c9690,9691
< CONVERT_FROM_RAW_ICD(DSC_DTYIBDOUBLE, RAWVAL, CVAL, DVAL, NVAL, NCVAL, RWVAL,
< BFVAL, RESVAL);
---
> CONVERT_FROM_RAW_ICD(DSC_DTYIBDOUBLE, RAWVAL, CVAL, DVAL, NVAL, NCVAL,
> RWVAL, BFVAL, RESVAL);
9830,9831c9925,9926
< RAISE_APPLICATION_ERROR(-20000, 'Unsupported data type ' || TYP_CODE || ' ' ||
< TBL_NAME || ' ' || COL_NAME);
---
> RAISE_APPLICATION_ERROR(-20000, 'Unsupported data type ' || TYP_CODE ||
> ' ' || TBL_NAME || ' ' || COL_NAME);
10320c10415,10416
< FOR REC IN DBMS_STATS_INTERNAL.PART_NAME_QRY(TBL_OWNER,TBL_NAME,PART_NAME)
---
> FOR REC IN DBMS_STATS_INTERNAL.PART_NAME_QRY(TBL_OWNER,TBL_NAME,
> PART_NAME)
10577c10673,10674
< RAISE_APPLICATION_ERROR(-20000, 'Cannot store user statistics in external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot store user statistics in external statistics table');
10679c10776,10777
< RAISE_APPLICATION_ERROR(-20000, 'Cannot get user statistics from external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot get user statistics from external statistics table');
10804c10902,10903
< RAISE_APPLICATION_ERROR(-20000, 'Cannot store user statistics in external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot store user statistics in external statistics table');
10872c10971,10972
< RAISE_APPLICATION_ERROR(-20000, 'Cannot get user statistics from external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot get user statistics from external statistics table');
11457,11458c11557,11558
< RAISE_APPLICATION_ERROR(-20000, 'Could not find anything wrong '||
< 'with statistics table ' || STATOWNU || '.' || STATTABU ||
---
> RAISE_APPLICATION_ERROR(-20000, 'Could not find anything '||
> 'wrong with statistics table ' || STATOWNU || '.' || STATTABU ||
13335c13435,13436
< INT_ASSERT(FALSE,'show_extended_stats_name_aux', 'invalid extn_type', FALSE, 0);
---
> INT_ASSERT(FALSE,'show_extended_stats_name_aux', 'invalid extn_type',
> FALSE, 0);
13361c13462,13463
< RAISE_APPLICATION_ERROR(-20001, 'Error when processing extension - ' ||
---
> RAISE_APPLICATION_ERROR(-20001,
> 'Error when processing extension - ' ||
13392c13494
< BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
---
> BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
13404c13506,13507
< DBMS_STATS_INTERNAL.DUMP_TRACE('Trying to create extension ' || SAFE_EXTN);
---
> DBMS_STATS_INTERNAL.DUMP_TRACE('Trying to create extension ' ||
> SAFE_EXTN);
13552c13655
< 'not supported for an index organized table ');
---
> 'not supported for an index organized table ');
13567c13670,13671
< RAISE_APPLICATION_ERROR(-20001, 'Error when processing extension - ' ||
---
> RAISE_APPLICATION_ERROR(-20001,
> 'Error when processing extension - ' ||
13628c13732
< BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
---
> BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
13673a13778
>
13710a13816
>
13872c13978,13979
< LASTTABNAME,LASTCOLNAME,LASTPARTNAME,LASTSUBPARTNAME,OWNER;
---
> LASTTABNAME,LASTCOLNAME,LASTPARTNAME,LASTSUBPARTNAME,
> OWNER;
14162c14269,14270
< OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU, PARTNAMEU);
---
> OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU,
> PARTNAMEU);
14275c14383
< 'Invalid or inconsistent input values in the histogram endpoints');
---
> 'Invalid or inconsistent input values in the histogram endpoints');
14558c14666,14667
< IF ((ISTATS(I).ALBLK IS NULL) AND (ISTATS(I).NLBLKS IS NOT NULL)) THEN
---
> IF ((ISTATS(I).ALBLK IS NULL) AND
> (ISTATS(I).NLBLKS IS NOT NULL)) THEN
14713c14822,14823
< OPEN SYS.DBMS_STATS_INTERNAL.GET_IPART_NAME(OWNER, INDNAMEU, PARTNAMEU);
---
> OPEN SYS.DBMS_STATS_INTERNAL.GET_IPART_NAME(OWNER, INDNAMEU,
> PARTNAMEU);
15477c15587,15588
< OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU, PARTNAMEU);
---
> OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU,
> PARTNAMEU);
16127c16238,16239
< OBJ_TRANSFERRED IN OUT BOOLEAN,
---
> OBJ_TRANSFERRED IN OUT BOOLEAN,
>
16320c16432,16433
< OBJ_TRANSFERRED IN OUT BOOLEAN,
---
> OBJ_TRANSFERRED IN OUT BOOLEAN,
>
16473c16586,16587
< IF ((DELETEST = FALSE) AND (FROMTABU IS NULL) AND TOTABU IS NOT NULL) THEN
---
> IF ((DELETEST = FALSE) AND (FROMTABU IS NULL) AND
> TOTABU IS NOT NULL) THEN
16573c16687,16688
< TOBJN := DBMS_STATS_INTERNAL.GET_OBJNUM(TSTATS(I).OWN, TSTATS(I).TAB,
---
> TOBJN := DBMS_STATS_INTERNAL.GET_OBJNUM(TSTATS(I).OWN,
> TSTATS(I).TAB,
17003,17004c17118,17119
< STATOWN, 'Schema', NO_INVALIDATE, FALSE, STATTYPE, FORCE, OBJ_TRANSFERRED,
< FALSE, STAT_CATEGORY);
---
> STATOWN, 'Schema', NO_INVALIDATE, FALSE, STATTYPE, FORCE,
> OBJ_TRANSFERRED, FALSE, STAT_CATEGORY);
17018,17019c17133,17134
< STATOWN, 'Database', NO_INVALIDATE, FALSE, STATTYPE, FORCE, OBJ_TRANSFERRED,
< TRUE, STAT_CATEGORY);
---
> STATOWN, 'Database', NO_INVALIDATE, FALSE, STATTYPE, FORCE,
> OBJ_TRANSFERRED, TRUE, STAT_CATEGORY);
17295c17410,17411
< RAISE_APPLICATION_ERROR (-20001, 'Invalid or inconsistent input values');
---
> RAISE_APPLICATION_ERROR (-20001,
> 'Invalid or inconsistent input values');
17971,17972c18087,18088
< TXT := 'select statid,type,version,flags,c1,c2,c3,c4,n1,n2,n3,n4,n5,n6,' ||
< 'n7,n8,n9,d1,r1,r2 from ' || DBMS_STATS_INTERNAL.DQ(OWNER) ||
---
> TXT := 'select statid,type,version,flags,c1,c2,c3,c4,n1,n2,n3,n4,n5,' ||
> 'n6,n7,n8,n9,d1,r1,r2 from ' || DBMS_STATS_INTERNAL.DQ(OWNER) ||
19138a19255
>
19140c19257,19258
< LOCAL_BKTNUM INTEGER;
---
>
> LOCAL_BKTNUM INTEGER;
19551a19670
>
19553c19672,19673
< BITAND(CLIST(CIND).HGATH, DSC_CREC_EP+DSC_CREC_RP) = 0) THEN
---
> BITAND(CLIST(CIND).HGATH, DSC_CREC_EP+DSC_CREC_RP) =
> 0) THEN
19759,19760c19879,19880
< 'invalid column name or duplicate columns/column groups/expressions' ||
< ' in method_opt');
---
> 'invalid column name or duplicate columns/column groups/expressions' ||
> ' in method_opt');
19859c19979
< BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
---
> BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
20632a20753
>
22361a22483,22566
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_ROW_COUNT_ESTIMATE (
> OWNNAME VARCHAR2,
> TABNAME VARCHAR2,
> PARTNAME VARCHAR2,
> NBLKS INTEGER,
> DEGREE INTEGER
> ) RETURN NUMBER IS
> ROW_COUNT NUMBER;
> OWNER VARCHAR2(30);
> TABNAMEU VARCHAR2(30);
> PARTNAMEU VARCHAR2(30);
> FOBJN NUMBER;
> PNAME VARCHAR2(30);
> SPNAME VARCHAR2(30);
> SEED INTEGER;
> NO_ITERATION BOOLEAN;
> PARTTYPE NUMBER;
> BEGIN
> FILL_IN_SCHEMA(OWNNAME, OWNER);
> UPCASE(TABNAME, TABNAMEU);
> UPCASE(PARTNAME, PARTNAMEU);
> STATS_CHECK_PRIVILEGES(OWNER, TABNAMEU, DSC_KGLNTABL, FALSE, NULL);
>
> IF (PARTNAMEU IS NOT NULL) THEN
>
> VALIDATE_PART(OWNER, TABNAMEU, PARTNAMEU, DSC_KGLTTABL, NULL);
>
>
> FOBJN := DBMS_STATS_INTERNAL.GET_OBJNUM(OWNER, TABNAMEU, PARTNAMEU, NULL,
> 'TABLE');
>
>
> IF (PARTTYPE = 5 ) THEN
> SPNAME := PARTNAMEU;
> ELSE
> PNAME := PARTNAMEU;
> END IF;
> END IF;
>
> GET_EVENT_LEVEL(DSC_SAMPLE_SEED_EVENT, SEED);
>
> IF (DBMS_STATS_INTERNAL.GET_FXT_TYP(OWNER, TABNAME) = DSC_NON_FXT) THEN
> NO_ITERATION := FALSE;
> ELSE
> NO_ITERATION := TRUE;
> END IF;
>
> QUICK_ESTIMATE_ROWCNT(OWNER,
> TABNAMEU,
> PNAME,
> SPNAME,
> FOBJN,
> ROW_COUNT,
> SEED,
> NBLKS,
> DEGREE,
> NO_ITERATION);
> RETURN ROW_COUNT;
> END GET_ROW_COUNT_ESTIMATE;
>
>
22457c22662
< CLIST IN OUT NOCOPY CTAB,
---
> CLIST IN OUT NOCOPY CTAB,
22627c22832
< CLIST IN OUT NOCOPY CTAB,
---
> CLIST IN OUT NOCOPY CTAB,
23640a23846
>
23930a24137
>
24435,24437c24642,24644
< TRACE_INDEX('ndk of index ' || INDNAME || ' on ' || PART.PNAME
< || ' set to ' || CSTATS(1).DIST || ' (ndv of ' || COLUMN_NAME
< || ')');
---
> TRACE_INDEX('ndk of index ' || INDNAME || ' on ' ||
> PART.PNAME || ' set to ' || CSTATS(1).DIST ||
> ' (ndv of ' || COLUMN_NAME || ')');
24439,24441c24646,24648
< TRACE_INDEX('ndk of index ' || INDNAME || ' on ' || SPART.SPNAME
< || ' set to ' || CSTATS(1).DIST || ' (ndv of ' || COLUMN_NAME
< || ')');
---
> TRACE_INDEX('ndk of index ' || INDNAME || ' on ' ||
> SPART.SPNAME || ' set to ' || CSTATS(1).DIST ||
> ' (ndv of ' || COLUMN_NAME || ')');
24460c24667,24668
< IF (COLLECT_NDK AND TSTATS_UPTODATE AND SAMPLE_PCT < DSC_SAMPLE_MAXPCT AND
---
> IF (COLLECT_NDK AND TSTATS_UPTODATE AND
> SAMPLE_PCT < DSC_SAMPLE_MAXPCT AND
25464c25672,25673
< RESTORE_INDEX_STATS_AUX(DBMS_STATS_INTERNAL.DQ(LOPINFO(SOFAR).NAME2),
---
> RESTORE_INDEX_STATS_AUX(DBMS_STATS_INTERNAL.DQ(
> LOPINFO(SOFAR).NAME2),
25593c25802,25803
< DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, NULL, NULL, IDX.TOBJN);
---
> DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, NULL, NULL,
> IDX.TOBJN);
25598c25808,25809
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, NULL, NULL, IDX.TOBJN);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, NULL,
> NULL, IDX.TOBJN);
25602c25813,25814
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDXGRAN, NULL, NULL, IDX.TOBJN);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDXGRAN, NULL, NULL,
> IDX.TOBJN);
25794c26006,26007
< (BITAND(DBMS_SQLDIAG.GET_FIX_CONTROL(8917507), 2) = 2) AND
---
> (BITAND(DBMS_SQLDIAG.GET_FIX_CONTROL(8917507), 2) =
> 2) AND
25819,25820c26032,26035
< TRACE_INDEX('last: ' || TO_CHAR(SPART.LAST_ANALYZED, 'MM-DD-YYYY HH24:MI:SS') ||
< ' start_time: ' || TO_CHAR(START_TIME, 'MM-DD-YYYY HH24:MI:SS'));
---
> TRACE_INDEX('last: ' || TO_CHAR(SPART.LAST_ANALYZED,
> 'MM-DD-YYYY HH24:MI:SS') ||
> ' start_time: ' || TO_CHAR(START_TIME,
> 'MM-DD-YYYY HH24:MI:SS'));
26522c26737,26738
< IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) = DSC_CREC_MINMAX) AND
---
> IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) =
> DSC_CREC_MINMAX) AND
26594c26810,26811
< IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) = DSC_CREC_MINMAX) AND
---
> IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) =
> DSC_CREC_MINMAX) AND
27245c27462,27463
< TRACE_SCALING(' Caught an unusable-index error. giving up combo-ndv scaling');
---
> TRACE_SCALING(
> ' Caught an unusable-index error. giving up combo-ndv scaling');
27333,27334c27551,27553
< TRACE_HIST('Switching to frequency histogram, ssize = ' || SSIZE || ', popcnt = '
< || POPCNT || ', ssizesq = ' || SSIZESQ || ', popcntsq = ' || POPCNTSQ);
---
> TRACE_HIST('Switching to frequency histogram, ssize = ' || SSIZE ||
> ', popcnt = ' || POPCNT || ', ssizesq = ' || SSIZESQ ||
> ', popcntsq = ' || POPCNTSQ);
27570,27571c27789,27791
< EVALUATE_HEIGHT_HIST(CSR, CHT, DONE_HIST, PCT, POPCNT, POPCNTSQ, SSIZE, SSIZESQ,
< MIN_SSIZE, APPR_NDV, TRUE, INCREMENTAL);
---
>
> EVALUATE_HEIGHT_HIST(CSR, CHT, DONE_HIST, PCT, POPCNT, POPCNTSQ, SSIZE,
> SSIZESQ, MIN_SSIZE, APPR_NDV, TRUE, INCREMENTAL);
27601c27821,27822
< POPCNT, POPCNTSQ, PCT, DONE_HIST, CSR.SLSV, APPR_NDV);
---
> POPCNT, POPCNTSQ, PCT,
> DONE_HIST, CSR.SLSV, APPR_NDV);
27851,27852c28072,28074
< CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT, LOC_PPREDTXT,
< PRETXT, POSTTXT, MATERIALIZE);
---
> CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT,
> LOC_PPREDTXT, PRETXT, POSTTXT,
> MATERIALIZE);
27871,27872c28093,28095
< CONSTRUCT_SELECT_HEIGHT(CLIST(LOOPVAR), MNB, LOC_HINTTXT, LOC_PPREDTXT,
< PRETXT, POSTTXT, MATERIALIZE);
---
> CONSTRUCT_SELECT_HEIGHT(CLIST(LOOPVAR), MNB, LOC_HINTTXT,
> LOC_PPREDTXT, PRETXT, POSTTXT,
> MATERIALIZE);
27889,27890c28112,28114
< CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT, LOC_PPREDTXT,
< PRETXT, POSTTXT, MATERIALIZE);
---
> CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT,
> LOC_PPREDTXT, PRETXT, POSTTXT,
> MATERIALIZE);
28227c28451
< IF (BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_AVG) = DSC_CREC_AVG) THEN
---
> IF (BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_AVG) = DSC_CREC_AVG) THEN
28341,28344c28565,28568
< TRACE_SCALING(' Need larger sample: sndv = ' || CLIST(LOOPVAR).SNDV
< || ', snnvdv = ' || CLIST(LOOPVAR).SNNVDV
< || ', nnv = ' || NNV
< || ', ndv = ' || CLIST(LOOPVAR).NDV);
---
> TRACE_SCALING(' Need larger sample: sndv = ' ||
> CLIST(LOOPVAR).SNDV || ', snnvdv = ' ||
> CLIST(LOOPVAR).SNNVDV || ', nnv = ' || NNV ||
> ', ndv = ' || CLIST(LOOPVAR).NDV);
28509c28733,28734
< IF DBMS_STATS_INTERNAL.COLHASHISTOGRAM(TOBJN, CLIST(LOOPVAR).ICOL) THEN
---
> IF DBMS_STATS_INTERNAL.COLHASHISTOGRAM(TOBJN,
> CLIST(LOOPVAR).ICOL) THEN
28511c28736,28737
< CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH, DSC_CREC_HIST);
---
> CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH,
> DSC_CREC_HIST);
28517c28743,28744
< CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH, DSC_CREC_HIST);
---
> CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH,
> DSC_CREC_HIST);
29900c30127
< IF (BITAND(SEL.GATHFLG, DSC_SELREC_RES) = DSC_SELREC_RES) THEN
---
> IF (BITAND(SEL.GATHFLG, DSC_SELREC_RES) = DSC_SELREC_RES) THEN
30846c31073
< 'Unable to incrementally maintain, tablespace SYSAUX is offline');
---
> 'Unable to incrementally maintain, tablespace SYSAUX is offline');
30959a31187
>
31324c31552
< NEW_HIST_PCT BOOLEAN := FALSE;
---
> NEW_HIST_PCT BOOLEAN := FALSE;
31469,31474c31697,31704
< OWNER, TABNAME, PNAME, SPNAME, PCT, CTX.CONC_CTX.BLOCK_SAMPLE,
< CTX.CONC_CTX.METHOD_OPT, DEGREE, LOC_GRANULARITY, CTX.CONC_CTX.GIDXGRAN,
< CTX.CONC_CTX.CASCADE, NULL, NULL, NULL, CTX.CONC_CTX.NO_INVALIDATE,
< CTX.CONC_CTX.FLUSH_COLU, FXT_TYP, CTX.CONC_CTX.STATTYPE, CTX.CONC_CTX.START_TIME,
< CTX.CONC_CTX.GATHERING_GROUP_STATS, CTX.CONC_CTX.CMS_ONLY, CTX.CONC_CTX.FORCE,
< DSC_EXECUTE, CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB,
---
> OWNER, TABNAME, PNAME, SPNAME, PCT,
> CTX.CONC_CTX.BLOCK_SAMPLE, CTX.CONC_CTX.METHOD_OPT, DEGREE,
> LOC_GRANULARITY, CTX.CONC_CTX.GIDXGRAN, CTX.CONC_CTX.CASCADE,
> NULL, NULL, NULL, CTX.CONC_CTX.NO_INVALIDATE,
> CTX.CONC_CTX.FLUSH_COLU, FXT_TYP, CTX.CONC_CTX.STATTYPE,
> CTX.CONC_CTX.START_TIME, CTX.CONC_CTX.GATHERING_GROUP_STATS,
> CTX.CONC_CTX.CMS_ONLY, CTX.CONC_CTX.FORCE, DSC_EXECUTE,
> CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB,
31477,31480c31707,31711
< CTX.REPORTING_CTX.PRIORITY, CTX.REPORTING_CTX.FLAGS, TARGET_SIZE,
< BATCHING_COEFF,
< CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.REPORTING_CTX.TARGET_TYPE,
< DSC_STOP_ON_FIRST, REPORTING_MODE);
---
> CTX.REPORTING_CTX.PRIORITY, CTX.REPORTING_CTX.FLAGS,
> TARGET_SIZE, BATCHING_COEFF,
> CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX,
> CTX.REPORTING_CTX.TARGET_TYPE, DSC_STOP_ON_FIRST,
> REPORTING_MODE);
31918c32149,32150
< NEW_PCT := GET_NEW_PCT_FOR_APPR_NDV(CURR_PCT, CLIST, ISTART, ISTOP);
---
> NEW_PCT := GET_NEW_PCT_FOR_APPR_NDV(CURR_PCT, CLIST, ISTART,
> ISTOP);
32155c32387,32388
< SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTABP, NULL);
---
> SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTABP,
> NULL);
32158c32391,32392
< SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTASP, NULL);
---
> SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTASP,
> NULL);
32363c32597,32598
< FOR RECP IN SYS.DBMS_STATS_INTERNAL.TSPART_CUR_ORDERED(OWNER,TABNAME,PNAME)
---
> FOR RECP IN SYS.DBMS_STATS_INTERNAL.TSPART_CUR_ORDERED(OWNER,TABNAME,
> PNAME)
32506c32741
< DSC_ACTION_GATHER, NULL, SCSFLAGS);
---
> DSC_ACTION_GATHER, NULL, SCSFLAGS);
32520c32755,32756
< BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) = DSC_PREPARE)) THEN
---
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) =
> DSC_PREPARE)) THEN
32526c32762,32763
< TRACE_ERROR('gather_subpart [executeStatJobs: '|| BOOL2STR(CTX.CONC_CTX.EXECUTESTATJOBS) || ']');
---
> TRACE_ERROR('gather_subpart [executeStatJobs: '||
> BOOL2STR(CTX.CONC_CTX.EXECUTESTATJOBS) || ']');
32902c33139
< JOBPROGRESSMON(CTX.CONC_CTX.LAST_JOB_NAME) := LOPINFO(SOFAR);
---
> JOBPROGRESSMON(CTX.CONC_CTX.LAST_JOB_NAME) := LOPINFO(SOFAR);
33086a33324
>
33110,33111c33348,33351
< CTX.CONC_CTX.EXECUTESTATJOBS := BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE
< OR BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_SEQ) = DSC_SEQ;
---
> CTX.CONC_CTX.EXECUTESTATJOBS := BITAND(CTX.CONC_CTX.EXECUTIONPHASE,
> DSC_EXECUTE) = DSC_EXECUTE OR
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE,
> DSC_SEQ) = DSC_SEQ;
33116c33356,33357
< || ' global_requested: ' || BOOL2STR(CTX.CONC_CTX.GLOBAL_REQUESTED)
---
> || ' global_requested: '
> || BOOL2STR(CTX.CONC_CTX.GLOBAL_REQUESTED)
33311,33312c33552,33555
< BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) = DSC_PREPARE AND
< DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB(OWNER, TABNAME) = TRUE AND
---
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) =
> DSC_PREPARE AND
> DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB(OWNER, TABNAME) = TRUE AND
>
33315,33316c33558,33560
< TRACE_TABLE('IM or approx global case: submitting the current batch content: ' ||
< CTX.CONC_CTX.JOBSTAB.COUNT);
---
> TRACE_TABLE(
> 'IM or approx global case: submitting the current batch content: '
> || CTX.CONC_CTX.JOBSTAB.COUNT);
33320,33324c33564,33571
< JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB, CTX.CONC_CTX.AGENT,
< CTX.REPORTING_CTX.OP_ID, CTX.REPORTING_CTX.JOB_NAME,
< DSC_STOP_ON_FIRST,
< CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX,
< FALSE, TRUE, REPORTING_MODE);
---
> JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB,
> CTX.CONC_CTX.AGENT,
> CTX.REPORTING_CTX.OP_ID,
> CTX.REPORTING_CTX.JOB_NAME,
> DSC_STOP_ON_FIRST,
> CTX.CONC_CTX.AGENT <>
> CTX.CONC_CTX.JOB_NAME_PREFIX,
> FALSE, TRUE, REPORTING_MODE);
33327,33336c33574,33589
< JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB, CTX.CONC_CTX.AGENT,
< CTX.REPORTING_CTX.OP_ID, CTX.REPORTING_CTX.JOB_NAME,
< DSC_STOP_ON_FIRST,
< CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX,
< FALSE, FALSE, REPORTING_MODE);
< END IF;
< TRACE_TABLE('waiting for jobs in construct analyze sql (IM or approx global): ' ||
< CTX.CONC_CTX.JOBSTAB.COUNT);
< MONITORING_MAN_WAIT_FOR_JOBS(CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.CONC_CTX.JSTATS,
< CTX.CONC_CTX.JOBSTAB, CTX.CONC_CTX.AGENT, NULL,
---
> JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB,
> CTX.CONC_CTX.AGENT,
> CTX.REPORTING_CTX.OP_ID,
> CTX.REPORTING_CTX.JOB_NAME,
> DSC_STOP_ON_FIRST,
> CTX.CONC_CTX.AGENT <>
> CTX.CONC_CTX.JOB_NAME_PREFIX,
> FALSE, FALSE, REPORTING_MODE);
> END IF;
> TRACE_TABLE(
> 'waiting for jobs in construct analyze sql (IM or approx global): '
> || CTX.CONC_CTX.JOBSTAB.COUNT);
> MONITORING_MAN_WAIT_FOR_JOBS(CTX.CONC_CTX.JOB_NAME_PREFIX,
> CTX.CONC_CTX.JSTATS,
> CTX.CONC_CTX.JOBSTAB,
> CTX.CONC_CTX.AGENT, NULL,
33338,33340c33591,33596
< IF(CTX.CONC_CTX.JSTATS.FAILED > 0 OR CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
< IF CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_CODE IN (-1403, -942, -1031) THEN
< RAISE_APPLICATION_ERROR(-20009, CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
---
> IF(CTX.CONC_CTX.JSTATS.FAILED > 0 OR
> CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
> IF CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_CODE IN (-1403, -942, -1031)
> THEN
> RAISE_APPLICATION_ERROR(-20009,
> CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
33342c33598,33599
< RAISE_APPLICATION_ERROR(-20001, CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
---
> RAISE_APPLICATION_ERROR(-20001,
> CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
33384,33388c33641,33650
< CLIST, ISTART, ISTOP, CSTATS, TSTATS,
< SAMPLE = AUTO_SAMPLE_SIZE, INCREMENTAL_PARTLVL) = FALSE)) THEN
<
< IF((CTX.CONC_CTX.JOBSTAB.COUNT > 0 OR CTX.BATCHING_CTX.CURRENTBATCHSIZE > 0)
< AND (REP_TARGET_TYPE = DSC_TABLE OR REP_TARGET_TYPE = DSC_TABLE_COORD)) THEN
---
> CLIST, ISTART, ISTOP, CSTATS,
> TSTATS,
> SAMPLE = AUTO_SAMPLE_SIZE,
> INCREMENTAL_PARTLVL) =
> FALSE)) THEN
>
> IF((CTX.CONC_CTX.JOBSTAB.COUNT > 0 OR
> CTX.BATCHING_CTX.CURRENTBATCHSIZE > 0)
> AND (REP_TARGET_TYPE = DSC_TABLE OR
> REP_TARGET_TYPE = DSC_TABLE_COORD)) THEN
33453c33715,33716
< IF ((CTX.CONC_CTX.GLOBAL_REQUESTED AND BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE)
---
> IF ((CTX.CONC_CTX.GLOBAL_REQUESTED AND
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE)
33805c34068,34069
< EXECUTIONPHASE BINARY_INTEGER := CTX.CONC_CTX.EXECUTIONPHASE;
---
> EXECUTIONPHASE BINARY_INTEGER :=
> CTX.CONC_CTX.EXECUTIONPHASE;
33852,33854c34116,34119
< TRACE_TABLE('Started table ' || OWNER || '.' || TABNAMEU || '.' || PARTNAMEU || ' at '
< || SYSTIMESTAMP ||'. Execution phase: ' || EXEC_PHASE_TO_STR(EXECUTIONPHASE) ||
< ' stattype: ' || STATTYPE || ' Reporting Mode: ' || BOOL2STR(REPORTING_MODE));
---
> TRACE_TABLE('Started table ' || OWNER || '.' || TABNAMEU || '.' ||
> PARTNAMEU || ' at ' || SYSTIMESTAMP ||'. Execution phase: ' ||
> EXEC_PHASE_TO_STR(EXECUTIONPHASE) || ' stattype: ' ||
> STATTYPE || ' Reporting Mode: ' || BOOL2STR(REPORTING_MODE));
33877c34142,34143
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, OWNER,
> TABNAMEU);
33881c34147,34148
< DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, OWNER,
> TABNAMEU);
33886c34153,34154
< DBMS_STATS_INTERNAL.GET_PREFS('METHOD_OPT', LOC_METHOD_OPT, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('METHOD_OPT', LOC_METHOD_OPT, OWNER,
> TABNAMEU);
34032a34301
>
34130c34399
< EXECUTESTATJOBS := BITAND(EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE;
---
> EXECUTESTATJOBS := BITAND(EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE;
34209,34211c34478,34481
< NULL, NULL, STATTAB, STATID, TRANSFER_PART_STATS, TRUE, LOC_CASCADE, FALSE,
< STATOWN, IOT_TOP_NAME, FALSE, NO_INVALIDATE, FXT_TYP, 'ALL', FALSE,
< FALSE, OBJ_TRANSFERRED, DEFAULT_STAT_CATEGORY);
---
> NULL, NULL, STATTAB, STATID, TRANSFER_PART_STATS,
> TRUE, LOC_CASCADE, FALSE, STATOWN, IOT_TOP_NAME,
> FALSE, NO_INVALIDATE, FXT_TYP, 'ALL', FALSE,
> FALSE, OBJ_TRANSFERRED, DEFAULT_STAT_CATEGORY);
34268c34538,34539
< IF(CTX.CONC_CTX.GLOBAL_REQUESTED IS NULL AND GATHERING_GROUP_STATS) THEN
---
> IF (CTX.CONC_CTX.GLOBAL_REQUESTED IS NULL AND
> GATHERING_GROUP_STATS) THEN
34270c34541,34542
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDX_GRANULARITY, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDX_GRANULARITY,
> OWNER, TABNAMEU);
34274c34546,34547
< CTX.CONC_CTX.GLOBAL_REQUESTED := CHECK_GRANULARITY(INDEXGRAN, 'GLOBAL');
---
> CTX.CONC_CTX.GLOBAL_REQUESTED := CHECK_GRANULARITY(INDEXGRAN,
> 'GLOBAL');
34358c34631
< IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = LOC_IND_NAME)) THEN
---
> IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = LOC_IND_NAME)) THEN
34385c34658
< IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = RECI.IND_NAME)) THEN
---
> IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = RECI.IND_NAME)) THEN
34447c34720,34721
< TRACE_TABLE('waiting for all jobs to finish in gather_table_stats_aux: ' || CTX.CONC_CTX.JOBSTAB.COUNT);
---
> TRACE_TABLE('waiting for all jobs to finish in gather_table_stats_aux: '
> || CTX.CONC_CTX.JOBSTAB.COUNT);
34452c34726,34727
< IF(CTX.CONC_CTX.JSTATS.FAILED > 0 OR CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
---
> IF (CTX.CONC_CTX.JSTATS.FAILED > 0 OR
> CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
34460c34735,34738
< JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, LOC_JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
---
>
>
> JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, LOC_JOB_NAME_PREFIX,
> CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
34492c34770,34771
< OWNER || '.' || TABNAMEU || '.' || PARTNAMEU || ' at ' || SYSTIMESTAMP);
---
> OWNER || '.' || TABNAMEU || '.' || PARTNAMEU || ' at ' ||
> SYSTIMESTAMP);
34501c34780
< DSC_AUTO_STATS_COMPLETED,
---
> DSC_AUTO_STATS_COMPLETED,
34520a34800
>
34525,34526c34805,34807
< TRACE_ERROR('Exception in gather table stats aux... cleaned: ' || BOOL2STR(CLEANED)
< || ' isTopLevel: ' || BOOL2STR(ISTOPLEVEL));
---
> TRACE_ERROR('Exception in gather table stats aux... cleaned: ' ||
> BOOL2STR(CLEANED) || ' isTopLevel: ' ||
> BOOL2STR(ISTOPLEVEL));
34532c34813
< CTX.CONC_CTX.JSTATS.STOPPED || ' jobs were stopped.');
---
> CTX.CONC_CTX.JSTATS.STOPPED || ' jobs were stopped.');
34535c34816,34818
< JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
---
>
> JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX,
> CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
34537c34820,34821
< JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB, FALSE, FALSE);
---
> JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX,
> CTX.CONC_CTX.JOBSTAB, FALSE, FALSE);
34560,34561c34844,34846
< ' VIEW "' || OWNER || '"."' || USERSPECDTABNAME || '"' || PARTNAMEU ||
< ', insufficient privileges or invalid');
---
> ' VIEW "' || OWNER || '"."' ||
> USERSPECDTABNAME || '"' || PARTNAMEU ||
> ', insufficient privileges or invalid');
34682a34968,34980
>
>
>
>
>
>
>
>
>
>
>
>
>
34824c35122,35123
< TRACE_TABLE('Starting a batch of ' || TASK_COUNT || ' tasks... op id: ' || CTX.REPORTING_CTX.OP_ID);
---
> TRACE_TABLE('Starting a batch of ' || TASK_COUNT ||
> ' tasks... op id: ' || CTX.REPORTING_CTX.OP_ID);
34826c35125,35126
< TRACE_TABLE('Starting a single task batch... op id: ' || CTX.REPORTING_CTX.OP_ID);
---
> TRACE_TABLE('Starting a single task batch... op id: ' ||
> CTX.REPORTING_CTX.OP_ID);
34856c35156,35157
< TRACE_TABLE('Processing task ' || ITER || ' of ' || TASK_COUNT || '...');
---
> TRACE_TABLE('Processing task ' || ITER || ' of ' || TASK_COUNT ||
> '...');
34862c35163
< LOC_START_TIME := TO_DATE(PARAMS(20), 'MM-DD-YYYY HH24:MI:SS');
---
> LOC_START_TIME := TO_DATE(PARAMS(20), 'MM-DD-YYYY HH24:MI:SS');
34873,34875c35174,35177
< TRACE_TABLE(' |--> ' || PARAMS(2) || '.' || PARAMS(3) || '.' || PARAMS(4) ||
< ' > Estimated Cost: ' || CTX.REPORTING_CTX.EST_COST ||
< ' Batching Coefficient: ' || CTX.REPORTING_CTX.BATCHING_COEFF);
---
> TRACE_TABLE(' |--> ' || PARAMS(2) || '.' || PARAMS(3) || '.' ||
> PARAMS(4) || ' > Estimated Cost: ' ||
> CTX.REPORTING_CTX.EST_COST || ' Batching Coefficient: ' ||
> CTX.REPORTING_CTX.BATCHING_COEFF);
34888c35190,35191
< TRACE_ERROR('Exception while processing task ' || ITER || ': ' || SQLERRM);
---
> TRACE_ERROR('Exception while processing task ' || ITER || ': ' ||
> SQLERRM);
34890c35193,35194
< (SQLCODE = -20000 AND SQLERRM LIKE '%insufficient privileges%')) THEN
---
> (SQLCODE = -20000 AND
> SQLERRM LIKE '%insufficient privileges%')) THEN
35085c35389,35390
< TRACE_TABLE('Start gather group stats...*' || OBJLIST.COUNT || ' stattab: ' || STATTAB);
---
> TRACE_TABLE('Start gather group stats...*' || OBJLIST.COUNT ||
> ' stattab: ' || STATTAB);
35225,35226c35530,35533
< TRACE_TABLE('Submit table job: objnameQ: '|| OBJNAMEQ || ' subname: ' || SUB_NAME ||
< ' multi-job table: ' || BOOL2STR(BITAND(EXECUTIONPHASE, DSC_PREPARE) = DSC_PREPARE));
---
> TRACE_TABLE('Submit table job: objnameQ: '|| OBJNAMEQ ||
> ' subname: ' || SUB_NAME || ' multi-job table: ' ||
> BOOL2STR(BITAND(EXECUTIONPHASE, DSC_PREPARE) =
> DSC_PREPARE));
35235,35240c35542,35547
< FALSE,FXT_TYP, STATTYPE, START_TIME, TRUE, CMS_ONLY,
< FORCE, EXECUTIONPHASE, JOB_NAME_PREFIX, JOBSTAB, NULL, FALSE,
< JOB_NAME_PREFIX, STAT_CTX.REPORTING_CTX.OP_ID,
< CURRELEM.PRIORITY, CURRELEM.FLAGS, TARGET_SIZE,
< BATCHING_COEFF, FALSE, DSC_TABLE, DSC_ABSORB,
< REPORTING_MODE);
---
> FALSE,FXT_TYP, STATTYPE, START_TIME, TRUE,
> CMS_ONLY, FORCE, EXECUTIONPHASE, JOB_NAME_PREFIX,
> JOBSTAB, NULL, FALSE, JOB_NAME_PREFIX,
> STAT_CTX.REPORTING_CTX.OP_ID, CURRELEM.PRIORITY,
> CURRELEM.FLAGS, TARGET_SIZE, BATCHING_COEFF, FALSE,
> DSC_TABLE, DSC_ABSORB, REPORTING_MODE);
35242c35549,35550
< JOBPROGRESSMON(STAT_CTX.BATCHING_CTX.BATCHJOBNAME) := PROGRESSREC;
---
> JOBPROGRESSMON(STAT_CTX.BATCHING_CTX.BATCHJOBNAME) :=
> PROGRESSREC;
35246a35555
>
35460c35769
<
---
>
35656c35965,35966
< DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR(OWNNAME,GSYS,GFXT,IGNORE_FLAGS,
---
> DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR(OWNNAME, GSYS, GFXT,
> IGNORE_FLAGS,
35666c35976,35977
< IF (AUTO AND GATHER_FIXED AND IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
---
> IF (AUTO AND GATHER_FIXED AND
> IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
35668,35674c35979,35989
< 'TABLE', RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
< ELSIF (AUTO AND IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME, 'TABLE')) THEN
< ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME,
< 'TABLE', RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
< ELSE
< ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME,
< 'TABLE', RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
---
> 'TABLE', RECT.OBJNAME, RECT.PARTNAME,
> RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
> ELSIF (AUTO AND IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME,
> 'TABLE')) THEN
> ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME, 'TABLE', RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_STALE_STATS);
> ELSE
> ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME, 'TABLE', RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_STALE_STATS);
35692,35693c36007,36009
< DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR(OWNNAME,GSYS,GTEMP,GFXT,
< IGNORE_FLAGS,LOC_GRANULARITY,GIND,CUR);
---
> DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR(OWNNAME, GSYS, GTEMP, GFXT,
> IGNORE_FLAGS,
> LOC_GRANULARITY, GIND, CUR);
35702,35704c36018,36022
< IF (AUTO AND GATHER_FIXED AND IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
< ADD_OBJECT_ELEM(OBJLIST_START, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
---
> IF (AUTO AND GATHER_FIXED AND
> IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
> ADD_OBJECT_ELEM(OBJLIST_START, RECT.OWNNAME, RECT.OBJTYPE,
> RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
35706,35708c36024,36028
< IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME, RECT.OBJTYPE)) THEN
< ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
---
> IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME,
> RECT.OBJTYPE)) THEN
> ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME, RECT.OBJTYPE,
> RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
35710,35714c36030,36036
< ADD_OBJECT_ELEM(OBJLIST2, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
< ELSE
< ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
---
> ADD_OBJECT_ELEM(OBJLIST2, RECT.OWNNAME, RECT.OBJTYPE, RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
> ELSE
> ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME, RECT.OBJTYPE, RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
35782c36104,36105
< TRACE_TABLE('Start gather schema/db stats... owner: ' || OWNER || ' stattab: ' || STATTAB);
---
> TRACE_TABLE('Start gather schema/db stats... owner: ' || OWNER ||
> ' stattab: ' || STATTAB);
35794c36117,36118
< JOB_QUEUE_PROCESSES := TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes'));
---
> JOB_QUEUE_PROCESSES :=
> TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes'));
35799c36123,36124
< JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(DSC_JOB_PREF || 'SD');
---
> JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(DSC_JOB_PREF ||
> 'SD');
36001c36326,36327
< GRANULARITY, CASCADE, FORCE, 'DATA', LOC_OBJ_FILTER_LIST);
---
> GRANULARITY, CASCADE, FORCE, 'DATA',
> LOC_OBJ_FILTER_LIST);
36027c36353,36354
< TRACE_TABLE('waiting for jobs in gather_schema_or_db_stats_aux: ' || JOBSTAB.COUNT);
---
> TRACE_TABLE('waiting for jobs in gather_schema_or_db_stats_aux: ' ||
> JOBSTAB.COUNT);
36034c36361,36362
< TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED || ' jobs were stopped.');
---
> TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED ||
> ' jobs were stopped.');
36039c36367,36368
< JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX, JOBSTAB, TRUE, TRUE);
---
> JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX,
> JOBSTAB, TRUE, TRUE);
36084a36414
>
36437a36768
>
36522,36529c36853,36859
< GATHER_SCHEMA_OR_DB_STATS(
< 'Database',
< NULL,ESTIMATE_PERCENT,BLOCK_SAMPLE,METHOD_OPT,
< DEGREE,GRANULARITY,CASCADE,STATTAB,STATID,
< OPTIONSU,TLIST,STATOWN,
< GATHER_SYS,NO_INVALIDATE,GATHER_TEMP,GATHER_FIXED, STATTYPEU,
< SYSTIMESTAMP, FALSE, OBJ_FILTER_LIST, COLLECTED_SOFAR, JOBSTAB, TRUE, NULL,
< CONCURRENT, OP_ID, REPORTING_MODE);
---
> GATHER_SCHEMA_OR_DB_STATS('Database', NULL, ESTIMATE_PERCENT, BLOCK_SAMPLE,
> METHOD_OPT, DEGREE, GRANULARITY, CASCADE,
> STATTAB, STATID, OPTIONSU, TLIST, STATOWN,
> GATHER_SYS, NO_INVALIDATE, GATHER_TEMP,
> GATHER_FIXED, STATTYPEU, SYSTIMESTAMP, FALSE,
> OBJ_FILTER_LIST, COLLECTED_SOFAR, JOBSTAB, TRUE,
> NULL, CONCURRENT, OP_ID, REPORTING_MODE);
37091a37422
>
39557a39889
>
40127,40129c40459,40462
< TRACE_TABLE('waiting for jobs in gather_dictionary_stats_aux: ' || JOBSTAB.COUNT);
< MONITORING_MAN_WAIT_FOR_JOBS(JOB_NAME_PREFIX, JSTATS,
< JOBSTAB, JOB_NAME_PREFIX, 'Dictionary Schema');
---
> TRACE_TABLE('waiting for jobs in gather_dictionary_stats_aux: ' ||
> JOBSTAB.COUNT);
> MONITORING_MAN_WAIT_FOR_JOBS(JOB_NAME_PREFIX, JSTATS, JOBSTAB,
> JOB_NAME_PREFIX, 'Dictionary Schema');
40134c40467,40468
< TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED || ' jobs were stopped.');
---
> TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED ||
> ' jobs were stopped.');
40137c40471,40472
< JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX, JOBSTAB, TRUE, TRUE);
---
> JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX,
> JOBSTAB, TRUE, TRUE);
41449a41785
>
41710c42046,42047
< DBMS_STATS_INTERNAL.PART_TYPES(OWNER, TABNAMEU, DSC_KGLNTABL, PTYPE, SPTYPE);
---
> DBMS_STATS_INTERNAL.PART_TYPES(OWNER, TABNAMEU, DSC_KGLNTABL, PTYPE,
> SPTYPE);
43229c43566
< FOR RECI IN SYS.DBMS_STATS_INTERNAL.ALL_INDEXES(OWNNAME,TABNAME, NULL,NULL)
---
> FOR RECI IN SYS.DBMS_STATS_INTERNAL.ALL_INDEXES(OWNNAME,TABNAME,NULL,NULL)
43811c44148
<
---
>
44379,44381c44716,44718
< DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST(SESID, SESSER, DEFAULT_GRANULARITY,
< NULL,
< TO_STALE_PERCENT_TYPE(GET_PREFS('STALE_PERCENT')));
---
> DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST(SESID, SESSER,
> DEFAULT_GRANULARITY, NULL,
> TO_STALE_PERCENT_TYPE(GET_PREFS('STALE_PERCENT')));
44964,44965c45301,45302
< RAISE_APPLICATION_ERROR (-20001,
< 'Invalid input value: valid values between 1 and 255 or DBMS_STATS.AUTO_TABLE_CACHED_BLOCKS');
---
> RAISE_APPLICATION_ERROR (-20001, 'Invalid input value: valid values ' ||
> 'between 1 and 255 or DBMS_STATS.AUTO_TABLE_CACHED_BLOCKS');
45842c46179,46180
< || ' and SYS_OP_MAP_NONNULL(s.statid) = SYS_OP_MAP_NONNULL(:statidU)';
---
> || ' and SYS_OP_MAP_NONNULL(s.statid) = '
> || ' SYS_OP_MAP_NONNULL(:statidU)';
45921a46260
>
46004a46344
>
46081a46422
>
46155a46497
>
46605a46948
>
46738a47082
>
46879a47224
>
47949,47950c48294,48295
< LINE_LOC := PAD_CHR(LINE_LOC || END_STR, DSC_EXTN_LEN) || DSC_HEADER_DELIM ||
< USAGE || DSC_NEW_LINE;
---
> LINE_LOC := PAD_CHR(LINE_LOC || END_STR, DSC_EXTN_LEN) ||
> DSC_HEADER_DELIM ||USAGE || DSC_NEW_LINE;
48134c48479,48480
< USED_CNT := REPORT_TAB_COL_USAGE(TREC.USER_NAME, TREC.OBJ_NAME, REPORT);
---
> USED_CNT := REPORT_TAB_COL_USAGE(TREC.USER_NAME, TREC.OBJ_NAME,
> REPORT);
48649,48650c48995,48997
< COMMON_HINTS VARCHAR2(32767)
< := 'dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring xmlindex_sel_idx_tbl ';
---
> COMMON_HINTS VARCHAR2(32767) := 'dbms_stats cursor_sharing_exact ' ||
> 'use_weak_name_resl dynamic_sampling(0) ' ||
> 'no_monitoring xmlindex_sel_idx_tbl ';
1206,1216c1206,1216
< SUCCEEDED INTEGER := 0,
< FAILED INTEGER := 0,
< STOPPED INTEGER := 0,
< STARTED INTEGER := 0,
< SCHEDULED INTEGER := 0,
<
<
< LASTJOB VARCHAR(30),
< LASTEVENT SCHEDULER$_EVENT_INFO,
< SOFAR_PART INTEGER := 0,
< SOFAR_SUBPART INTEGER := 0
---
> SUCCEEDED INTEGER := 0,
> FAILED INTEGER := 0,
> STOPPED INTEGER := 0,
> STARTED INTEGER := 0,
> SCHEDULED INTEGER := 0,
>
>
> LASTJOB VARCHAR(30),
> LASTEVENT SCHEDULER$_EVENT_INFO,
> SOFAR_PART INTEGER := 0,
> SOFAR_SUBPART INTEGER := 0
1219a1220
>
1243c1244,1245
< TOP_LEVEL BOOLEAN,
---
> TOP_LEVEL BOOLEAN,
>
1773a1776
>
2233c2236,2238
< FUNCTION CHECK_GRANULARITY(GRANULARITY VARCHAR2, GRANCHK VARCHAR2) RETURN BOOLEAN;
---
> FUNCTION CHECK_GRANULARITY(GRANULARITY VARCHAR2,
> GRANCHK VARCHAR2) RETURN BOOLEAN;
>
2237a2243
>
2239,2242c2245,2250
< JSTATS IN OUT NOCOPY JOBSTATSREC,
< JOBSTAB IN OUT NOCOPY VARCHARTAB, ANAME VARCHAR2, LOPSTR VARCHAR2,
< EXCEPTIONPOLICY BINARY_INTEGER DEFAULT DSC_ABSORB,
< RETURNPOLICY BINARY_INTEGER DEFAULT DSC_WAIT_FOR_ALL);
---
> JSTATS IN OUT NOCOPY JOBSTATSREC,
> JOBSTAB IN OUT NOCOPY VARCHARTAB,
> ANAME VARCHAR2, LOPSTR VARCHAR2,
> EXCEPTIONPOLICY BINARY_INTEGER DEFAULT DSC_ABSORB,
> RETURNPOLICY BINARY_INTEGER
> DEFAULT DSC_WAIT_FOR_ALL);
3111c3119,3121
< TSTATS(I).TAB || ' . ' || TSTATS(I).PART || ' . ' || TSTATS(I).SPART);
---
> TSTATS(I).TAB || ' . ' ||
> TSTATS(I).PART || ' . ' ||
> TSTATS(I).SPART);
3122c3132,3134
< ISTATS(I).IND || ' . ' || ISTATS(I).PART || ' . ' || ISTATS(I).SPART);
---
> ISTATS(I).IND || ' . ' ||
> ISTATS(I).PART || ' . ' ||
> ISTATS(I).SPART);
3736c3748,3749
< RAISE_APPLICATION_ERROR(-20001, 'DBMS_STATS: str2bool: invalid boolean value.');
---
> RAISE_APPLICATION_ERROR(-20001,
> 'DBMS_STATS: str2bool: invalid boolean value.');
4078c4091,4092
< IF(TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes')) < 4) THEN
---
> IF(TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes'))
> < 4) THEN
5229c5243,5244
< JOB_CLASS_NAME => DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX,
---
> JOB_CLASS_NAME => DSC_STATS_COLLECTION_JOB_CLASS || '_' ||
> SUFFIX,
5373c5388,5389
< TRACE_ERROR('exception in monitoring_man_drop_agent: ' || ': ' || SQLERRM );
---
> TRACE_ERROR('exception in monitoring_man_drop_agent: ' || ': ' ||
> SQLERRM );
5398a5415
>
5421,5423c5438,5441
< TRACE_ERROR('exception in monitoring_man_subscribe_agent: ' || SQLERRM);
< RAISE_APPLICATION_ERROR(-20001, 'monitoring_man_subscribe_agent: ' || ANAME ||
< ': ' || SQLERRM );
---
> TRACE_ERROR('exception in monitoring_man_subscribe_agent: ' ||
> SQLERRM);
> RAISE_APPLICATION_ERROR(-20001, 'monitoring_man_subscribe_agent: ' ||
> ANAME || ': ' || SQLERRM );
5449c5467,5468
< PROCEDURE JOB_MAN_PERFORM_CLEANUPS(FORCE BOOLEAN, DROP_JOB BOOLEAN, SUFFIX VARCHAR2,
---
> PROCEDURE JOB_MAN_PERFORM_CLEANUPS(FORCE BOOLEAN, DROP_JOB BOOLEAN,
> SUFFIX VARCHAR2,
5458,5459c5477,5479
< TRACE_TABLE('Perform Cleanups... ' || DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX
< || ' force: ' || BOOL2STR(FORCE) || ' drop_job: ' || BOOL2STR(DROP_JOB));
---
> TRACE_TABLE('Perform Cleanups... ' || DSC_STATS_COLLECTION_JOB_CLASS ||
> '_' || SUFFIX || ' force: ' || BOOL2STR(FORCE) ||
> ' drop_job: ' || BOOL2STR(DROP_JOB));
5475c5495,5496
< JOB_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX,
---
> JOB_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS ||
> '_' || SUFFIX,
5495c5516,5517
< JOB_CLASS_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS || '_' || SUFFIX);
---
> JOB_CLASS_NAME => 'SYS.' || DSC_STATS_COLLECTION_JOB_CLASS ||
> '_' || SUFFIX);
5498a5521
>
5559c5582,5583
< TRACE_ERROR('exception in monitoring_man_process_event: ' || ': ' || SQLERRM);
---
> TRACE_ERROR('exception in monitoring_man_process_event: ' || ': ' ||
> SQLERRM);
5576c5600,5601
< PROCEDURE GET_JOB_STATS(JOBSTAB IN OUT NOCOPY VARCHARTAB, JSTATS IN OUT NOCOPY JOBSTATSREC)
---
> PROCEDURE GET_JOB_STATS(JOBSTAB IN OUT NOCOPY VARCHARTAB,
> JSTATS IN OUT NOCOPY JOBSTATSREC)
5611a5637
>
5669a5696,5700
>
>
>
>
>
5672c5703,5704
< JOBSTAB IN OUT NOCOPY VARCHARTAB, ANAME VARCHAR2, LOPSTR VARCHAR2,
---
> JOBSTAB IN OUT NOCOPY VARCHARTAB, ANAME VARCHAR2,
> LOPSTR VARCHAR2,
5674c5706
< RETURNPOLICY BINARY_INTEGER DEFAULT DSC_WAIT_FOR_ALL)
---
> RETURNPOLICY BINARY_INTEGER DEFAULT DSC_WAIT_FOR_ALL)
5694,5695c5726,5728
< TRACE_TABLE(ANAME || ': waiting for jobs in wait_for_jobs...* '
< || TO_CHAR(JOBSTAB.COUNT - (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED)));
---
> TRACE_TABLE(ANAME || ': waiting for jobs in wait_for_jobs...* ' ||
> TO_CHAR(JOBSTAB.COUNT -
> (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED)));
5706c5739,5740
< DEQUEUE_OPTIONS.DEQ_CONDITION := 'tab.user_data.object_name like ''' || JOB_NAME_PREFIX || '%''';
---
> DEQUEUE_OPTIONS.DEQ_CONDITION := 'tab.user_data.object_name like ''' ||
> JOB_NAME_PREFIX || '%''';
5709c5743,5744
< WHILE (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED) < JOBSTAB.COUNT LOOP
---
> WHILE (JSTATS.SUCCEEDED + JSTATS.FAILED + JSTATS.STOPPED) <
> JOBSTAB.COUNT LOOP
5717a5753
>
5718a5755
>
5724a5762
>
5753c5791,5792
< TRACE_TABLE(' >> process event: ' || MESSAGE.OBJECT_NAME || ' > ' || MESSAGE.EVENT_TYPE ||
---
> TRACE_TABLE(' >> process event: ' || MESSAGE.OBJECT_NAME || ' > ' ||
> MESSAGE.EVENT_TYPE ||
5762c5801,5802
< TRACE_TABLE(' *** Failure Event: ' || MESSAGE.ERROR_CODE || ': ' || MESSAGE.ERROR_MSG);
---
> TRACE_TABLE(' *** Failure Event: ' || MESSAGE.ERROR_CODE || ': ' ||
> MESSAGE.ERROR_MSG);
5765c5805,5806
< RAISE_APPLICATION_ERROR(-20000, 'insufficient privileges to analyze an object.');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'insufficient privileges to analyze an object.');
5800c5841,5842
< DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(PROGRESSREC.RINDEX, PROGRESSREC.SLNO,
---
> DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(PROGRESSREC.RINDEX,
> PROGRESSREC.SLNO,
5822c5864,5866
< TRACE_ERROR(JOB_NAME_PREFIX ||': exception in monitoring_man_wait_for_jobs: ' || ': ' || SQLERRM );
---
> TRACE_ERROR(JOB_NAME_PREFIX ||
> ': exception in monitoring_man_wait_for_jobs: ' || ': ' ||
> SQLERRM );
6194a6239,6258
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
6284,6289c6348,6355
< TRACE_ERROR('Exception while creating job ' || JOBNAME || ' for table(s) ' ||
< COMMENTS || ' at ' || SYSTIMESTAMP ||
< ' jobsTab.count: ' || TO_CHAR(JOBSTAB.COUNT) || ': ' || SQLERRM );
< RAISE_APPLICATION_ERROR(-20001, 'Exception while creating job ' || JOBNAME || ' for table(s) ' ||
< COMMENTS || ' at ' || SYSTIMESTAMP ||
< ' jobsTab.count: ' || TO_CHAR(JOBSTAB.COUNT) || ': ' || SQLERRM);
---
> TRACE_ERROR('Exception while creating job ' || JOBNAME ||
> ' for table(s) ' || COMMENTS || ' at ' || SYSTIMESTAMP ||
> ' jobsTab.count: ' || TO_CHAR(JOBSTAB.COUNT) || ': ' ||
> SQLERRM );
> RAISE_APPLICATION_ERROR(-20001, 'Exception while creating job ' ||
> JOBNAME || ' for table(s) ' || COMMENTS ||
> ' at ' || SYSTIMESTAMP || ' jobsTab.count: ' ||
> TO_CHAR(JOBSTAB.COUNT) || ': ' || SQLERRM);
6309a6376,6377
>
>
7467c7535,7539
< PROCEDURE URGENT_CLEANUP(JOBSTAB IN OUT NOCOPY VARCHARTAB, JOB_CLASS_SUFFIX VARCHAR2,
---
>
>
>
> PROCEDURE URGENT_CLEANUP(JOBSTAB IN OUT NOCOPY VARCHARTAB,
> JOB_CLASS_SUFFIX VARCHAR2,
7474c7546,7547
< CLASS_SUFFIX DBMS_QUOTED_ID := DBMS_ASSERT_SIMPLE_SQL_NAME(JOB_CLASS_SUFFIX);
---
> CLASS_SUFFIX DBMS_QUOTED_ID :=
> DBMS_ASSERT_SIMPLE_SQL_NAME(JOB_CLASS_SUFFIX);
7492c7565,7566
< select owner ||'.' || job_name name from dba_scheduler_jobs
---
> select owner ||'.' || job_name name
> from dba_scheduler_jobs
7495c7569,7570
< select job_class_name name from dba_scheduler_job_classes
---
> select job_class_name name
> from dba_scheduler_job_classes
7518c7593,7594
< dbms_scheduler.stop_job(job_name=>rec.name, force=>true);
---
> dbms_scheduler.stop_job(job_name=>rec.name,
> force=>true);
7535c7611,7612
< dbms_scheduler.drop_job(job_name=>rec.name, force=>true);
---
> dbms_scheduler.drop_job(job_name=>rec.name,
> force=>true);
7545c7622,7623
< dbms_scheduler.drop_job_class(job_class_name=>rec.name, force=>true);
---
> dbms_scheduler.drop_job_class(job_class_name=>rec.name,
> force=>true);
7554,7556c7632,7637
< subscriber := sys.aq$_agent (rec.name, 'sys.scheduler$_event_queue', null);
< dbms_aqadm.remove_subscriber('sys.scheduler$_event_queue', subscriber);
< dbms_aqadm.drop_aq_agent (rec.name);
---
> subscriber := sys.aq$_agent (rec.name,
> 'sys.scheduler$_event_queue',
> null);
> dbms_aqadm.remove_subscriber('sys.scheduler$_event_queue',
> subscriber);
> dbms_aqadm.drop_aq_agent (rec.name);
7582c7663,7664
< TRACE_TABLE('Created Cleanup Job ' || LOC_JOB_NAME || ' at ' || SYSTIMESTAMP);
---
> TRACE_TABLE('Created Cleanup Job ' || LOC_JOB_NAME || ' at ' ||
> SYSTIMESTAMP);
7644a7727
>
7646c7729
< RES := MONITORING_MAN_SUBSCRIBE_AGENT(JOB_NAME_PREFIX, USERNAMEU);
---
> RES := MONITORING_MAN_SUBSCRIBE_AGENT(JOB_NAME_PREFIX, USERNAMEU);
7652c7735,7736
< TRACE_ERROR('Silent exception in init_conc: agent subscription has failed');
---
> TRACE_ERROR(
> 'Silent exception in init_conc: agent subscription has failed');
7706a7791,7793
>
>
>
7749c7836
< PROP := DBMS_STATS_INTERNAL.GET_TAB_PROPERTY(OWNER, TABNAME);
---
> PROP := DBMS_STATS_INTERNAL.GET_TAB_PROPERTY(OWNER, TABNAME);
7758c7845,7846
< NOT (BITAND(PROP, 4194304) = 4194304 OR BITAND(PROP, 8388608) = 8388608)
---
> NOT (BITAND(PROP, 4194304) = 4194304 OR BITAND(PROP, 8388608) =
> 8388608)
7788c7876,7877
< LOC_JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(DSC_JOB_PREF || 'T');
---
> LOC_JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(
> DSC_JOB_PREF || 'T');
7794c7883
< IF(IS_NULL(BATCHING_JOB_PREFIX) AND IS_NULL(JOB_NAME_PREFIX)) THEN
---
> IF(IS_NULL(BATCHING_JOB_PREFIX) AND IS_NULL(JOB_NAME_PREFIX)) THEN
7797c7886,7887
< TRACE_TABLE('Disabling concurrency as initializations have failed');
---
> TRACE_TABLE(
> 'Disabling concurrency as initializations have failed');
7805,7806c7895,7897
< JOB_MAN_PERFORM_CLEANUPS(TRUE, FALSE, BATCHING_JOB_PREFIX, CONCTX.JOBSTAB,
< TRUE, TRUE);
---
>
> JOB_MAN_PERFORM_CLEANUPS(TRUE, FALSE, BATCHING_JOB_PREFIX,
> CONCTX.JOBSTAB, TRUE, TRUE);
7928c8019,8020
< (OWNER VARCHAR2, OBJNAMEU IN OUT NOCOPY VARCHAR2, OBJTYPE BINARY_INTEGER) IS
---
> (OWNER VARCHAR2, OBJNAMEU IN OUT NOCOPY VARCHAR2, OBJTYPE BINARY_INTEGER)
> IS
8570c8662
< DBMS_STATS_INTERNAL.PART_TYPES(OWNNAME, OBJNAME, OBJTYPE, PTYPE, SPTYPE);
---
> DBMS_STATS_INTERNAL.PART_TYPES(OWNNAME, OBJNAME, OBJTYPE, PTYPE, SPTYPE);
8619a8712,8713
>
>
8945c9039,9040
< STATS_CHECK_PRIVILEGES(OWNER, TREC.OBJ_NAME, DSC_KGLNTABL, FALSE, NULL);
---
> STATS_CHECK_PRIVILEGES(OWNER, TREC.OBJ_NAME, DSC_KGLNTABL, FALSE,
> NULL);
9112c9207
< DBMS_ASSERT.SIMPLE_SQL_NAME(DBMS_STATS_INTERNAL.DQ(COL.PCNAME));
---
> DBMS_ASSERT.SIMPLE_SQL_NAME(DBMS_STATS_INTERNAL.DQ(COL.PCNAME));
9370,9371c9465,9466
< CONVERT_FROM_RAW_ICD(DSC_DTYIBFLOAT, RAWVAL, CVAL, DVAL, NVAL, NCVAL, RWVAL,
< RESVAL, BDVAL);
---
> CONVERT_FROM_RAW_ICD(DSC_DTYIBFLOAT, RAWVAL, CVAL, DVAL, NVAL, NCVAL,
> RWVAL, RESVAL, BDVAL);
9386,9387c9481,9482
< CONVERT_FROM_RAW_ICD(DSC_DTYIBDOUBLE, RAWVAL, CVAL, DVAL, NVAL, NCVAL, RWVAL,
< BFVAL, RESVAL);
---
> CONVERT_FROM_RAW_ICD(DSC_DTYIBDOUBLE, RAWVAL, CVAL, DVAL, NVAL, NCVAL,
> RWVAL, BFVAL, RESVAL);
9621,9622c9716,9717
< RAISE_APPLICATION_ERROR(-20000, 'Unsupported data type ' || TYP_CODE || ' ' ||
< TBL_NAME || ' ' || COL_NAME);
---
> RAISE_APPLICATION_ERROR(-20000, 'Unsupported data type ' || TYP_CODE ||
> ' ' || TBL_NAME || ' ' || COL_NAME);
10111c10206,10207
< FOR REC IN DBMS_STATS_INTERNAL.PART_NAME_QRY(TBL_OWNER,TBL_NAME,PART_NAME)
---
> FOR REC IN DBMS_STATS_INTERNAL.PART_NAME_QRY(TBL_OWNER,TBL_NAME,
> PART_NAME)
10368c10464,10465
< RAISE_APPLICATION_ERROR(-20000, 'Cannot store user statistics in external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot store user statistics in external statistics table');
10470c10567,10568
< RAISE_APPLICATION_ERROR(-20000, 'Cannot get user statistics from external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot get user statistics from external statistics table');
10595c10693,10694
< RAISE_APPLICATION_ERROR(-20000, 'Cannot store user statistics in external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot store user statistics in external statistics table');
10663c10762,10763
< RAISE_APPLICATION_ERROR(-20000, 'Cannot get user statistics from external statistics table');
---
> RAISE_APPLICATION_ERROR(-20000,
> 'Cannot get user statistics from external statistics table');
11248,11249c11348,11349
< RAISE_APPLICATION_ERROR(-20000, 'Could not find anything wrong '||
< 'with statistics table ' || STATOWNU || '.' || STATTABU ||
---
> RAISE_APPLICATION_ERROR(-20000, 'Could not find anything '||
> 'wrong with statistics table ' || STATOWNU || '.' || STATTABU ||
13117c13217,13218
< INT_ASSERT(FALSE,'show_extended_stats_name_aux', 'invalid extn_type', FALSE, 0);
---
> INT_ASSERT(FALSE,'show_extended_stats_name_aux', 'invalid extn_type',
> FALSE, 0);
13143c13244,13245
< RAISE_APPLICATION_ERROR(-20001, 'Error when processing extension - ' ||
---
> RAISE_APPLICATION_ERROR(-20001,
> 'Error when processing extension - ' ||
13174c13276
< BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
---
> BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
13186c13288,13289
< DBMS_STATS_INTERNAL.DUMP_TRACE('Trying to create extension ' || SAFE_EXTN);
---
> DBMS_STATS_INTERNAL.DUMP_TRACE('Trying to create extension ' ||
> SAFE_EXTN);
13334c13437
< 'not supported for an index organized table ');
---
> 'not supported for an index organized table ');
13349c13452,13453
< RAISE_APPLICATION_ERROR(-20001, 'Error when processing extension - ' ||
---
> RAISE_APPLICATION_ERROR(-20001,
> 'Error when processing extension - ' ||
13410c13514
< BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
---
> BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
13455a13560
>
13492a13598
>
13649c13755,13756
< LASTTABNAME,LASTCOLNAME,LASTPARTNAME,LASTSUBPARTNAME,OWNER;
---
> LASTTABNAME,LASTCOLNAME,LASTPARTNAME,LASTSUBPARTNAME,
> OWNER;
13939c14046,14047
< OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU, PARTNAMEU);
---
> OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU,
> PARTNAMEU);
14052c14160
< 'Invalid or inconsistent input values in the histogram endpoints');
---
> 'Invalid or inconsistent input values in the histogram endpoints');
14330c14438,14439
< IF ((ISTATS(I).ALBLK IS NULL) AND (ISTATS(I).NLBLKS IS NOT NULL)) THEN
---
> IF ((ISTATS(I).ALBLK IS NULL) AND
> (ISTATS(I).NLBLKS IS NOT NULL)) THEN
14485c14594,14595
< OPEN SYS.DBMS_STATS_INTERNAL.GET_IPART_NAME(OWNER, INDNAMEU, PARTNAMEU);
---
> OPEN SYS.DBMS_STATS_INTERNAL.GET_IPART_NAME(OWNER, INDNAMEU,
> PARTNAMEU);
15244c15354,15355
< OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU, PARTNAMEU);
---
> OPEN SYS.DBMS_STATS_INTERNAL.GET_TPART_NAME(OWNER, TABNAMEU,
> PARTNAMEU);
15891c16002,16003
< OBJ_TRANSFERRED IN OUT BOOLEAN,
---
> OBJ_TRANSFERRED IN OUT BOOLEAN,
>
16084c16196,16197
< OBJ_TRANSFERRED IN OUT BOOLEAN,
---
> OBJ_TRANSFERRED IN OUT BOOLEAN,
>
16237c16350,16351
< IF ((DELETEST = FALSE) AND (FROMTABU IS NULL) AND TOTABU IS NOT NULL) THEN
---
> IF ((DELETEST = FALSE) AND (FROMTABU IS NULL) AND
> TOTABU IS NOT NULL) THEN
16337c16451,16452
< TOBJN := DBMS_STATS_INTERNAL.GET_OBJNUM(TSTATS(I).OWN, TSTATS(I).TAB,
---
> TOBJN := DBMS_STATS_INTERNAL.GET_OBJNUM(TSTATS(I).OWN,
> TSTATS(I).TAB,
16767,16768c16882,16883
< STATOWN, 'Schema', NO_INVALIDATE, FALSE, STATTYPE, FORCE, OBJ_TRANSFERRED,
< FALSE, STAT_CATEGORY);
---
> STATOWN, 'Schema', NO_INVALIDATE, FALSE, STATTYPE, FORCE,
> OBJ_TRANSFERRED, FALSE, STAT_CATEGORY);
16782,16783c16897,16898
< STATOWN, 'Database', NO_INVALIDATE, FALSE, STATTYPE, FORCE, OBJ_TRANSFERRED,
< TRUE, STAT_CATEGORY);
---
> STATOWN, 'Database', NO_INVALIDATE, FALSE, STATTYPE, FORCE,
> OBJ_TRANSFERRED, TRUE, STAT_CATEGORY);
17059c17174,17175
< RAISE_APPLICATION_ERROR (-20001, 'Invalid or inconsistent input values');
---
> RAISE_APPLICATION_ERROR (-20001,
> 'Invalid or inconsistent input values');
17734,17735c17850,17851
< TXT := 'select statid,type,version,flags,c1,c2,c3,c4,n1,n2,n3,n4,n5,n6,' ||
< 'n7,n8,n9,d1,r1,r2 from ' || DBMS_STATS_INTERNAL.DQ(OWNER) ||
---
> TXT := 'select statid,type,version,flags,c1,c2,c3,c4,n1,n2,n3,n4,n5,' ||
> 'n6,n7,n8,n9,d1,r1,r2 from ' || DBMS_STATS_INTERNAL.DQ(OWNER) ||
18901a19018
>
18903c19020,19021
< LOCAL_BKTNUM INTEGER;
---
>
> LOCAL_BKTNUM INTEGER;
19314a19433
>
19316c19435,19436
< BITAND(CLIST(CIND).HGATH, DSC_CREC_EP+DSC_CREC_RP) = 0) THEN
---
> BITAND(CLIST(CIND).HGATH, DSC_CREC_EP+DSC_CREC_RP) =
> 0) THEN
19522,19523c19642,19643
< 'invalid column name or duplicate columns/column groups/expressions' ||
< ' in method_opt');
---
> 'invalid column name or duplicate columns/column groups/expressions' ||
> ' in method_opt');
19622c19742
< BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
---
> BITAND (DBMS_STATS_INTERNAL.TRACE_LEVEL, DSC_COL_TRC) = DSC_COL_TRC;
20395a20516
>
22123a22245,22328
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_ROW_COUNT_ESTIMATE (
> OWNNAME VARCHAR2,
> TABNAME VARCHAR2,
> PARTNAME VARCHAR2,
> NBLKS INTEGER,
> DEGREE INTEGER
> ) RETURN NUMBER IS
> ROW_COUNT NUMBER;
> OWNER VARCHAR2(30);
> TABNAMEU VARCHAR2(30);
> PARTNAMEU VARCHAR2(30);
> FOBJN NUMBER;
> PNAME VARCHAR2(30);
> SPNAME VARCHAR2(30);
> SEED INTEGER;
> NO_ITERATION BOOLEAN;
> PARTTYPE NUMBER;
> BEGIN
> FILL_IN_SCHEMA(OWNNAME, OWNER);
> UPCASE(TABNAME, TABNAMEU);
> UPCASE(PARTNAME, PARTNAMEU);
> STATS_CHECK_PRIVILEGES(OWNER, TABNAMEU, DSC_KGLNTABL, FALSE, NULL);
>
> IF (PARTNAMEU IS NOT NULL) THEN
>
> VALIDATE_PART(OWNER, TABNAMEU, PARTNAMEU, DSC_KGLTTABL, NULL);
>
>
> FOBJN := DBMS_STATS_INTERNAL.GET_OBJNUM(OWNER, TABNAMEU, PARTNAMEU, NULL,
> 'TABLE');
>
>
> IF (PARTTYPE = 5 ) THEN
> SPNAME := PARTNAMEU;
> ELSE
> PNAME := PARTNAMEU;
> END IF;
> END IF;
>
> GET_EVENT_LEVEL(DSC_SAMPLE_SEED_EVENT, SEED);
>
> IF (DBMS_STATS_INTERNAL.GET_FXT_TYP(OWNER, TABNAME) = DSC_NON_FXT) THEN
> NO_ITERATION := FALSE;
> ELSE
> NO_ITERATION := TRUE;
> END IF;
>
> QUICK_ESTIMATE_ROWCNT(OWNER,
> TABNAMEU,
> PNAME,
> SPNAME,
> FOBJN,
> ROW_COUNT,
> SEED,
> NBLKS,
> DEGREE,
> NO_ITERATION);
> RETURN ROW_COUNT;
> END GET_ROW_COUNT_ESTIMATE;
>
>
22219c22424
< CLIST IN OUT NOCOPY CTAB,
---
> CLIST IN OUT NOCOPY CTAB,
22389c22594
< CLIST IN OUT NOCOPY CTAB,
---
> CLIST IN OUT NOCOPY CTAB,
23402a23608
>
23692a23899
>
24197,24199c24404,24406
< TRACE_INDEX('ndk of index ' || INDNAME || ' on ' || PART.PNAME
< || ' set to ' || CSTATS(1).DIST || ' (ndv of ' || COLUMN_NAME
< || ')');
---
> TRACE_INDEX('ndk of index ' || INDNAME || ' on ' ||
> PART.PNAME || ' set to ' || CSTATS(1).DIST ||
> ' (ndv of ' || COLUMN_NAME || ')');
24201,24203c24408,24410
< TRACE_INDEX('ndk of index ' || INDNAME || ' on ' || SPART.SPNAME
< || ' set to ' || CSTATS(1).DIST || ' (ndv of ' || COLUMN_NAME
< || ')');
---
> TRACE_INDEX('ndk of index ' || INDNAME || ' on ' ||
> SPART.SPNAME || ' set to ' || CSTATS(1).DIST ||
> ' (ndv of ' || COLUMN_NAME || ')');
24222c24429,24430
< IF (COLLECT_NDK AND TSTATS_UPTODATE AND SAMPLE_PCT < DSC_SAMPLE_MAXPCT AND
---
> IF (COLLECT_NDK AND TSTATS_UPTODATE AND
> SAMPLE_PCT < DSC_SAMPLE_MAXPCT AND
25226c25434,25435
< RESTORE_INDEX_STATS_AUX(DBMS_STATS_INTERNAL.DQ(LOPINFO(SOFAR).NAME2),
---
> RESTORE_INDEX_STATS_AUX(DBMS_STATS_INTERNAL.DQ(
> LOPINFO(SOFAR).NAME2),
25355c25564,25565
< DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, NULL, NULL, IDX.TOBJN);
---
> DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, NULL, NULL,
> IDX.TOBJN);
25360c25570,25571
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, NULL, NULL, IDX.TOBJN);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, NULL,
> NULL, IDX.TOBJN);
25364c25575,25576
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDXGRAN, NULL, NULL, IDX.TOBJN);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDXGRAN, NULL, NULL,
> IDX.TOBJN);
25556c25768,25769
< (BITAND(DBMS_SQLDIAG.GET_FIX_CONTROL(8917507), 2) = 2) AND
---
> (BITAND(DBMS_SQLDIAG.GET_FIX_CONTROL(8917507), 2) =
> 2) AND
25581,25582c25794,25797
< TRACE_INDEX('last: ' || TO_CHAR(SPART.LAST_ANALYZED, 'MM-DD-YYYY HH24:MI:SS') ||
< ' start_time: ' || TO_CHAR(START_TIME, 'MM-DD-YYYY HH24:MI:SS'));
---
> TRACE_INDEX('last: ' || TO_CHAR(SPART.LAST_ANALYZED,
> 'MM-DD-YYYY HH24:MI:SS') ||
> ' start_time: ' || TO_CHAR(START_TIME,
> 'MM-DD-YYYY HH24:MI:SS'));
26284c26499,26500
< IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) = DSC_CREC_MINMAX) AND
---
> IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) =
> DSC_CREC_MINMAX) AND
26356c26572,26573
< IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) = DSC_CREC_MINMAX) AND
---
> IF ((BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_MINMAX) =
> DSC_CREC_MINMAX) AND
27007c27224,27225
< TRACE_SCALING(' Caught an unusable-index error. giving up combo-ndv scaling');
---
> TRACE_SCALING(
> ' Caught an unusable-index error. giving up combo-ndv scaling');
27095,27096c27313,27315
< TRACE_HIST('Switching to frequency histogram, ssize = ' || SSIZE || ', popcnt = '
< || POPCNT || ', ssizesq = ' || SSIZESQ || ', popcntsq = ' || POPCNTSQ);
---
> TRACE_HIST('Switching to frequency histogram, ssize = ' || SSIZE ||
> ', popcnt = ' || POPCNT || ', ssizesq = ' || SSIZESQ ||
> ', popcntsq = ' || POPCNTSQ);
27332,27333c27551,27553
< EVALUATE_HEIGHT_HIST(CSR, CHT, DONE_HIST, PCT, POPCNT, POPCNTSQ, SSIZE, SSIZESQ,
< MIN_SSIZE, APPR_NDV, TRUE, INCREMENTAL);
---
>
> EVALUATE_HEIGHT_HIST(CSR, CHT, DONE_HIST, PCT, POPCNT, POPCNTSQ, SSIZE,
> SSIZESQ, MIN_SSIZE, APPR_NDV, TRUE, INCREMENTAL);
27363c27583,27584
< POPCNT, POPCNTSQ, PCT, DONE_HIST, CSR.SLSV, APPR_NDV);
---
> POPCNT, POPCNTSQ, PCT,
> DONE_HIST, CSR.SLSV, APPR_NDV);
27613,27614c27834,27836
< CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT, LOC_PPREDTXT,
< PRETXT, POSTTXT, MATERIALIZE);
---
> CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT,
> LOC_PPREDTXT, PRETXT, POSTTXT,
> MATERIALIZE);
27633,27634c27855,27857
< CONSTRUCT_SELECT_HEIGHT(CLIST(LOOPVAR), MNB, LOC_HINTTXT, LOC_PPREDTXT,
< PRETXT, POSTTXT, MATERIALIZE);
---
> CONSTRUCT_SELECT_HEIGHT(CLIST(LOOPVAR), MNB, LOC_HINTTXT,
> LOC_PPREDTXT, PRETXT, POSTTXT,
> MATERIALIZE);
27651,27652c27874,27876
< CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT, LOC_PPREDTXT,
< PRETXT, POSTTXT, MATERIALIZE);
---
> CONSTRUCT_SELECT_FREQUENCY(CLIST(LOOPVAR), LOC_HINTTXT,
> LOC_PPREDTXT, PRETXT, POSTTXT,
> MATERIALIZE);
27989c28213
< IF (BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_AVG) = DSC_CREC_AVG) THEN
---
> IF (BITAND(CLIST(LOOPVAR).GATHER,DSC_CREC_AVG) = DSC_CREC_AVG) THEN
28103,28106c28327,28330
< TRACE_SCALING(' Need larger sample: sndv = ' || CLIST(LOOPVAR).SNDV
< || ', snnvdv = ' || CLIST(LOOPVAR).SNNVDV
< || ', nnv = ' || NNV
< || ', ndv = ' || CLIST(LOOPVAR).NDV);
---
> TRACE_SCALING(' Need larger sample: sndv = ' ||
> CLIST(LOOPVAR).SNDV || ', snnvdv = ' ||
> CLIST(LOOPVAR).SNNVDV || ', nnv = ' || NNV ||
> ', ndv = ' || CLIST(LOOPVAR).NDV);
28271c28495,28496
< IF DBMS_STATS_INTERNAL.COLHASHISTOGRAM(TOBJN, CLIST(LOOPVAR).ICOL) THEN
---
> IF DBMS_STATS_INTERNAL.COLHASHISTOGRAM(TOBJN,
> CLIST(LOOPVAR).ICOL) THEN
28273c28498,28499
< CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH, DSC_CREC_HIST);
---
> CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH,
> DSC_CREC_HIST);
28279c28505,28506
< CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH, DSC_CREC_HIST);
---
> CLIST(LOOPVAR).HGATH := BITOR(CLIST(LOOPVAR).HGATH,
> DSC_CREC_HIST);
29657c29884
< IF (BITAND(SEL.GATHFLG, DSC_SELREC_RES) = DSC_SELREC_RES) THEN
---
> IF (BITAND(SEL.GATHFLG, DSC_SELREC_RES) = DSC_SELREC_RES) THEN
30603c30830
< 'Unable to incrementally maintain, tablespace SYSAUX is offline');
---
> 'Unable to incrementally maintain, tablespace SYSAUX is offline');
30716a30944
>
31081c31309
< NEW_HIST_PCT BOOLEAN := FALSE;
---
> NEW_HIST_PCT BOOLEAN := FALSE;
31226,31231c31454,31461
< OWNER, TABNAME, PNAME, SPNAME, PCT, CTX.CONC_CTX.BLOCK_SAMPLE,
< CTX.CONC_CTX.METHOD_OPT, DEGREE, LOC_GRANULARITY, CTX.CONC_CTX.GIDXGRAN,
< CTX.CONC_CTX.CASCADE, NULL, NULL, NULL, CTX.CONC_CTX.NO_INVALIDATE,
< CTX.CONC_CTX.FLUSH_COLU, FXT_TYP, CTX.CONC_CTX.STATTYPE, CTX.CONC_CTX.START_TIME,
< CTX.CONC_CTX.GATHERING_GROUP_STATS, CTX.CONC_CTX.CMS_ONLY, CTX.CONC_CTX.FORCE,
< DSC_EXECUTE, CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB,
---
> OWNER, TABNAME, PNAME, SPNAME, PCT,
> CTX.CONC_CTX.BLOCK_SAMPLE, CTX.CONC_CTX.METHOD_OPT, DEGREE,
> LOC_GRANULARITY, CTX.CONC_CTX.GIDXGRAN, CTX.CONC_CTX.CASCADE,
> NULL, NULL, NULL, CTX.CONC_CTX.NO_INVALIDATE,
> CTX.CONC_CTX.FLUSH_COLU, FXT_TYP, CTX.CONC_CTX.STATTYPE,
> CTX.CONC_CTX.START_TIME, CTX.CONC_CTX.GATHERING_GROUP_STATS,
> CTX.CONC_CTX.CMS_ONLY, CTX.CONC_CTX.FORCE, DSC_EXECUTE,
> CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB,
31234,31237c31464,31468
< CTX.REPORTING_CTX.PRIORITY, CTX.REPORTING_CTX.FLAGS, TARGET_SIZE,
< BATCHING_COEFF,
< CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.REPORTING_CTX.TARGET_TYPE,
< DSC_STOP_ON_FIRST, REPORTING_MODE);
---
> CTX.REPORTING_CTX.PRIORITY, CTX.REPORTING_CTX.FLAGS,
> TARGET_SIZE, BATCHING_COEFF,
> CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX,
> CTX.REPORTING_CTX.TARGET_TYPE, DSC_STOP_ON_FIRST,
> REPORTING_MODE);
31675c31906,31907
< NEW_PCT := GET_NEW_PCT_FOR_APPR_NDV(CURR_PCT, CLIST, ISTART, ISTOP);
---
> NEW_PCT := GET_NEW_PCT_FOR_APPR_NDV(CURR_PCT, CLIST, ISTART,
> ISTOP);
31908c32140,32141
< SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTABP, NULL);
---
> SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTABP,
> NULL);
31911c32144,32145
< SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTASP, NULL);
---
> SYS.DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG(FOBJN, DSC_KGLTTASP,
> NULL);
32116c32350,32351
< FOR RECP IN SYS.DBMS_STATS_INTERNAL.TSPART_CUR_ORDERED(OWNER,TABNAME,PNAME)
---
> FOR RECP IN SYS.DBMS_STATS_INTERNAL.TSPART_CUR_ORDERED(OWNER,TABNAME,
> PNAME)
32259c32494
< DSC_ACTION_GATHER, NULL, SCSFLAGS);
---
> DSC_ACTION_GATHER, NULL, SCSFLAGS);
32269c32504,32505
< BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) = DSC_PREPARE)) THEN
---
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) =
> DSC_PREPARE)) THEN
32275c32511,32512
< TRACE_ERROR('gather_subpart [executeStatJobs: '|| BOOL2STR(CTX.CONC_CTX.EXECUTESTATJOBS) || ']');
---
> TRACE_ERROR('gather_subpart [executeStatJobs: '||
> BOOL2STR(CTX.CONC_CTX.EXECUTESTATJOBS) || ']');
32651c32888
< JOBPROGRESSMON(CTX.CONC_CTX.LAST_JOB_NAME) := LOPINFO(SOFAR);
---
> JOBPROGRESSMON(CTX.CONC_CTX.LAST_JOB_NAME) := LOPINFO(SOFAR);
32835a33073
>
32858,32859c33096,33099
< CTX.CONC_CTX.EXECUTESTATJOBS := BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE
< OR BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_SEQ) = DSC_SEQ;
---
> CTX.CONC_CTX.EXECUTESTATJOBS := BITAND(CTX.CONC_CTX.EXECUTIONPHASE,
> DSC_EXECUTE) = DSC_EXECUTE OR
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE,
> DSC_SEQ) = DSC_SEQ;
32864c33104,33105
< || ' global_requested: ' || BOOL2STR(CTX.CONC_CTX.GLOBAL_REQUESTED)
---
> || ' global_requested: '
> || BOOL2STR(CTX.CONC_CTX.GLOBAL_REQUESTED)
33044,33045c33285,33288
< BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) = DSC_PREPARE AND
< DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB(OWNER, TABNAME) = TRUE AND
---
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_PREPARE) =
> DSC_PREPARE AND
> DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB(OWNER, TABNAME) = TRUE AND
>
33048,33049c33291,33293
< TRACE_TABLE('IM or approx global case: submitting the current batch content: ' ||
< CTX.CONC_CTX.JOBSTAB.COUNT);
---
> TRACE_TABLE(
> 'IM or approx global case: submitting the current batch content: '
> || CTX.CONC_CTX.JOBSTAB.COUNT);
33053,33057c33297,33304
< JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB, CTX.CONC_CTX.AGENT,
< CTX.REPORTING_CTX.OP_ID, CTX.REPORTING_CTX.JOB_NAME,
< DSC_STOP_ON_FIRST,
< CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX,
< FALSE, TRUE, REPORTING_MODE);
---
> JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB,
> CTX.CONC_CTX.AGENT,
> CTX.REPORTING_CTX.OP_ID,
> CTX.REPORTING_CTX.JOB_NAME,
> DSC_STOP_ON_FIRST,
> CTX.CONC_CTX.AGENT <>
> CTX.CONC_CTX.JOB_NAME_PREFIX,
> FALSE, TRUE, REPORTING_MODE);
33060,33069c33307,33322
< JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB, CTX.CONC_CTX.AGENT,
< CTX.REPORTING_CTX.OP_ID, CTX.REPORTING_CTX.JOB_NAME,
< DSC_STOP_ON_FIRST,
< CTX.CONC_CTX.AGENT <> CTX.CONC_CTX.JOB_NAME_PREFIX,
< FALSE, FALSE, REPORTING_MODE);
< END IF;
< TRACE_TABLE('waiting for jobs in construct analyze sql (IM or approx global): ' ||
< CTX.CONC_CTX.JOBSTAB.COUNT);
< MONITORING_MAN_WAIT_FOR_JOBS(CTX.CONC_CTX.JOB_NAME_PREFIX, CTX.CONC_CTX.JSTATS,
< CTX.CONC_CTX.JOBSTAB, CTX.CONC_CTX.AGENT, NULL,
---
> JOB_MAN_SUBMIT_JOB_BATCH(CTX.BATCHING_CTX, CTX.CONC_CTX.JOBSTAB,
> CTX.CONC_CTX.AGENT,
> CTX.REPORTING_CTX.OP_ID,
> CTX.REPORTING_CTX.JOB_NAME,
> DSC_STOP_ON_FIRST,
> CTX.CONC_CTX.AGENT <>
> CTX.CONC_CTX.JOB_NAME_PREFIX,
> FALSE, FALSE, REPORTING_MODE);
> END IF;
> TRACE_TABLE(
> 'waiting for jobs in construct analyze sql (IM or approx global): '
> || CTX.CONC_CTX.JOBSTAB.COUNT);
> MONITORING_MAN_WAIT_FOR_JOBS(CTX.CONC_CTX.JOB_NAME_PREFIX,
> CTX.CONC_CTX.JSTATS,
> CTX.CONC_CTX.JOBSTAB,
> CTX.CONC_CTX.AGENT, NULL,
33071,33073c33324,33329
< IF(CTX.CONC_CTX.JSTATS.FAILED > 0 OR CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
< IF CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_CODE IN (-1403, -942, -1031) THEN
< RAISE_APPLICATION_ERROR(-20009, CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
---
> IF(CTX.CONC_CTX.JSTATS.FAILED > 0 OR
> CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
> IF CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_CODE IN (-1403, -942, -1031)
> THEN
> RAISE_APPLICATION_ERROR(-20009,
> CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
33075c33331,33332
< RAISE_APPLICATION_ERROR(-20001, CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
---
> RAISE_APPLICATION_ERROR(-20001,
> CTX.CONC_CTX.JSTATS.LASTEVENT.ERROR_MSG);
33117,33121c33374,33383
< CLIST, ISTART, ISTOP, CSTATS, TSTATS,
< SAMPLE = AUTO_SAMPLE_SIZE, INCREMENTAL_PARTLVL) = FALSE)) THEN
<
< IF((CTX.CONC_CTX.JOBSTAB.COUNT > 0 OR CTX.BATCHING_CTX.CURRENTBATCHSIZE > 0)
< AND (REP_TARGET_TYPE = DSC_TABLE OR REP_TARGET_TYPE = DSC_TABLE_COORD)) THEN
---
> CLIST, ISTART, ISTOP, CSTATS,
> TSTATS,
> SAMPLE = AUTO_SAMPLE_SIZE,
> INCREMENTAL_PARTLVL) =
> FALSE)) THEN
>
> IF((CTX.CONC_CTX.JOBSTAB.COUNT > 0 OR
> CTX.BATCHING_CTX.CURRENTBATCHSIZE > 0)
> AND (REP_TARGET_TYPE = DSC_TABLE OR
> REP_TARGET_TYPE = DSC_TABLE_COORD)) THEN
33186c33448,33449
< IF ((CTX.CONC_CTX.GLOBAL_REQUESTED AND BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE)
---
> IF ((CTX.CONC_CTX.GLOBAL_REQUESTED AND
> BITAND(CTX.CONC_CTX.EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE)
33538c33801,33802
< EXECUTIONPHASE BINARY_INTEGER := CTX.CONC_CTX.EXECUTIONPHASE;
---
> EXECUTIONPHASE BINARY_INTEGER :=
> CTX.CONC_CTX.EXECUTIONPHASE;
33582,33584c33846,33849
< TRACE_TABLE('Started table ' || OWNER || '.' || TABNAMEU || '.' || PARTNAMEU || ' at '
< || SYSTIMESTAMP ||'. Execution phase: ' || EXEC_PHASE_TO_STR(EXECUTIONPHASE) ||
< ' stattype: ' || STATTYPE || ' Reporting Mode: ' || BOOL2STR(REPORTING_MODE));
---
> TRACE_TABLE('Started table ' || OWNER || '.' || TABNAMEU || '.' ||
> PARTNAMEU || ' at ' || SYSTIMESTAMP ||'. Execution phase: ' ||
> EXEC_PHASE_TO_STR(EXECUTIONPHASE) || ' stattype: ' ||
> STATTYPE || ' Reporting Mode: ' || BOOL2STR(REPORTING_MODE));
33607c33872,33873
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GRANULARITY, OWNER,
> TABNAMEU);
33611c33877,33878
< DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('ESTIMATE_PERCENT', PVALU, OWNER,
> TABNAMEU);
33616c33883,33884
< DBMS_STATS_INTERNAL.GET_PREFS('METHOD_OPT', LOC_METHOD_OPT, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('METHOD_OPT', LOC_METHOD_OPT, OWNER,
> TABNAMEU);
33762a34031
>
33857c34126
< EXECUTESTATJOBS := BITAND(EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE;
---
> EXECUTESTATJOBS := BITAND(EXECUTIONPHASE, DSC_EXECUTE) = DSC_EXECUTE;
33936,33938c34205,34208
< NULL, NULL, STATTAB, STATID, TRANSFER_PART_STATS, TRUE, LOC_CASCADE, FALSE,
< STATOWN, IOT_TOP_NAME, FALSE, NO_INVALIDATE, FXT_TYP, 'ALL', FALSE,
< FALSE, OBJ_TRANSFERRED, DEFAULT_STAT_CATEGORY);
---
> NULL, NULL, STATTAB, STATID, TRANSFER_PART_STATS,
> TRUE, LOC_CASCADE, FALSE, STATOWN, IOT_TOP_NAME,
> FALSE, NO_INVALIDATE, FXT_TYP, 'ALL', FALSE,
> FALSE, OBJ_TRANSFERRED, DEFAULT_STAT_CATEGORY);
33989c34259,34260
< IF(CTX.CONC_CTX.GLOBAL_REQUESTED IS NULL AND GATHERING_GROUP_STATS) THEN
---
> IF (CTX.CONC_CTX.GLOBAL_REQUESTED IS NULL AND
> GATHERING_GROUP_STATS) THEN
33991c34262,34263
< DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDX_GRANULARITY, OWNER, TABNAMEU);
---
> DBMS_STATS_INTERNAL.GET_PREFS('GRANULARITY', LOC_GIDX_GRANULARITY,
> OWNER, TABNAMEU);
33995c34267,34268
< CTX.CONC_CTX.GLOBAL_REQUESTED := CHECK_GRANULARITY(INDEXGRAN, 'GLOBAL');
---
> CTX.CONC_CTX.GLOBAL_REQUESTED := CHECK_GRANULARITY(INDEXGRAN,
> 'GLOBAL');
34079c34352
< IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = LOC_IND_NAME)) THEN
---
> IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = LOC_IND_NAME)) THEN
34106c34379
< IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = RECI.IND_NAME)) THEN
---
> IF ((LOC_CASCADE = TRUE) OR (IOT_TOP_NAME = RECI.IND_NAME)) THEN
34168c34441,34442
< TRACE_TABLE('waiting for all jobs to finish in gather_table_stats_aux: ' || CTX.CONC_CTX.JOBSTAB.COUNT);
---
> TRACE_TABLE('waiting for all jobs to finish in gather_table_stats_aux: '
> || CTX.CONC_CTX.JOBSTAB.COUNT);
34173c34447,34448
< IF(CTX.CONC_CTX.JSTATS.FAILED > 0 OR CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
---
> IF (CTX.CONC_CTX.JSTATS.FAILED > 0 OR
> CTX.CONC_CTX.JSTATS.STOPPED > 0) THEN
34181c34456,34459
< JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, LOC_JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
---
>
>
> JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, LOC_JOB_NAME_PREFIX,
> CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
34205c34483,34484
< OWNER || '.' || TABNAMEU || '.' || PARTNAMEU || ' at ' || SYSTIMESTAMP);
---
> OWNER || '.' || TABNAMEU || '.' || PARTNAMEU || ' at ' ||
> SYSTIMESTAMP);
34214c34493
< DSC_AUTO_STATS_COMPLETED,
---
> DSC_AUTO_STATS_COMPLETED,
34233a34513
>
34238,34239c34518,34520
< TRACE_ERROR('Exception in gather table stats aux... cleaned: ' || BOOL2STR(CLEANED)
< || ' isTopLevel: ' || BOOL2STR(ISTOPLEVEL));
---
> TRACE_ERROR('Exception in gather table stats aux... cleaned: ' ||
> BOOL2STR(CLEANED) || ' isTopLevel: ' ||
> BOOL2STR(ISTOPLEVEL));
34245c34526
< CTX.CONC_CTX.JSTATS.STOPPED || ' jobs were stopped.');
---
> CTX.CONC_CTX.JSTATS.STOPPED || ' jobs were stopped.');
34248c34529,34531
< JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
---
>
> JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX,
> CTX.CONC_CTX.JOBSTAB, TRUE, TRUE);
34250c34533,34534
< JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX, CTX.CONC_CTX.JOBSTAB, FALSE, FALSE);
---
> JOB_MAN_PERFORM_CLEANUPS(TRUE, TRUE, LOC_JOB_NAME_PREFIX,
> CTX.CONC_CTX.JOBSTAB, FALSE, FALSE);
34273,34274c34557,34559
< ' VIEW "' || OWNER || '"."' || USERSPECDTABNAME || '"' || PARTNAMEU ||
< ', insufficient privileges or invalid');
---
> ' VIEW "' || OWNER || '"."' ||
> USERSPECDTABNAME || '"' || PARTNAMEU ||
> ', insufficient privileges or invalid');
34395a34681,34693
>
>
>
>
>
>
>
>
>
>
>
>
>
34537c34835,34836
< TRACE_TABLE('Starting a batch of ' || TASK_COUNT || ' tasks... op id: ' || CTX.REPORTING_CTX.OP_ID);
---
> TRACE_TABLE('Starting a batch of ' || TASK_COUNT ||
> ' tasks... op id: ' || CTX.REPORTING_CTX.OP_ID);
34539c34838,34839
< TRACE_TABLE('Starting a single task batch... op id: ' || CTX.REPORTING_CTX.OP_ID);
---
> TRACE_TABLE('Starting a single task batch... op id: ' ||
> CTX.REPORTING_CTX.OP_ID);
34569c34869,34870
< TRACE_TABLE('Processing task ' || ITER || ' of ' || TASK_COUNT || '...');
---
> TRACE_TABLE('Processing task ' || ITER || ' of ' || TASK_COUNT ||
> '...');
34575c34876
< LOC_START_TIME := TO_DATE(PARAMS(20), 'MM-DD-YYYY HH24:MI:SS');
---
> LOC_START_TIME := TO_DATE(PARAMS(20), 'MM-DD-YYYY HH24:MI:SS');
34586,34588c34887,34890
< TRACE_TABLE(' |--> ' || PARAMS(2) || '.' || PARAMS(3) || '.' || PARAMS(4) ||
< ' > Estimated Cost: ' || CTX.REPORTING_CTX.EST_COST ||
< ' Batching Coefficient: ' || CTX.REPORTING_CTX.BATCHING_COEFF);
---
> TRACE_TABLE(' |--> ' || PARAMS(2) || '.' || PARAMS(3) || '.' ||
> PARAMS(4) || ' > Estimated Cost: ' ||
> CTX.REPORTING_CTX.EST_COST || ' Batching Coefficient: ' ||
> CTX.REPORTING_CTX.BATCHING_COEFF);
34601c34903,34904
< TRACE_ERROR('Exception while processing task ' || ITER || ': ' || SQLERRM);
---
> TRACE_ERROR('Exception while processing task ' || ITER || ': ' ||
> SQLERRM);
34603c34906,34907
< (SQLCODE = -20000 AND SQLERRM LIKE '%insufficient privileges%')) THEN
---
> (SQLCODE = -20000 AND
> SQLERRM LIKE '%insufficient privileges%')) THEN
34798c35102,35103
< TRACE_TABLE('Start gather group stats...*' || OBJLIST.COUNT || ' stattab: ' || STATTAB);
---
> TRACE_TABLE('Start gather group stats...*' || OBJLIST.COUNT ||
> ' stattab: ' || STATTAB);
34938,34939c35243,35246
< TRACE_TABLE('Submit table job: objnameQ: '|| OBJNAMEQ || ' subname: ' || SUB_NAME ||
< ' multi-job table: ' || BOOL2STR(BITAND(EXECUTIONPHASE, DSC_PREPARE) = DSC_PREPARE));
---
> TRACE_TABLE('Submit table job: objnameQ: '|| OBJNAMEQ ||
> ' subname: ' || SUB_NAME || ' multi-job table: ' ||
> BOOL2STR(BITAND(EXECUTIONPHASE, DSC_PREPARE) =
> DSC_PREPARE));
34948,34953c35255,35260
< FALSE,FXT_TYP, STATTYPE, START_TIME, TRUE, CMS_ONLY,
< FORCE, EXECUTIONPHASE, JOB_NAME_PREFIX, JOBSTAB, NULL, FALSE,
< JOB_NAME_PREFIX, STAT_CTX.REPORTING_CTX.OP_ID,
< CURRELEM.PRIORITY, CURRELEM.FLAGS, TARGET_SIZE,
< BATCHING_COEFF, FALSE, DSC_TABLE, DSC_ABSORB,
< REPORTING_MODE);
---
> FALSE,FXT_TYP, STATTYPE, START_TIME, TRUE,
> CMS_ONLY, FORCE, EXECUTIONPHASE, JOB_NAME_PREFIX,
> JOBSTAB, NULL, FALSE, JOB_NAME_PREFIX,
> STAT_CTX.REPORTING_CTX.OP_ID, CURRELEM.PRIORITY,
> CURRELEM.FLAGS, TARGET_SIZE, BATCHING_COEFF, FALSE,
> DSC_TABLE, DSC_ABSORB, REPORTING_MODE);
34955c35262,35263
< JOBPROGRESSMON(STAT_CTX.BATCHING_CTX.BATCHJOBNAME) := PROGRESSREC;
---
> JOBPROGRESSMON(STAT_CTX.BATCHING_CTX.BATCHJOBNAME) :=
> PROGRESSREC;
34959a35268
>
35168c35477
<
---
>
35364c35673,35674
< DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR(OWNNAME,GSYS,GFXT,IGNORE_FLAGS,
---
> DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR(OWNNAME, GSYS, GFXT,
> IGNORE_FLAGS,
35374c35684,35685
< IF (AUTO AND GATHER_FIXED AND IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
---
> IF (AUTO AND GATHER_FIXED AND
> IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
35376,35382c35687,35697
< 'TABLE', RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
< ELSIF (AUTO AND IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME, 'TABLE')) THEN
< ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME,
< 'TABLE', RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
< ELSE
< ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME,
< 'TABLE', RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
---
> 'TABLE', RECT.OBJNAME, RECT.PARTNAME,
> RECT.SUBPARTNAME, DSC_AUTO_FLAGS_STALE_STATS);
> ELSIF (AUTO AND IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME,
> 'TABLE')) THEN
> ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME, 'TABLE', RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_STALE_STATS);
> ELSE
> ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME, 'TABLE', RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_STALE_STATS);
35400,35401c35715,35717
< DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR(OWNNAME,GSYS,GTEMP,GFXT,
< IGNORE_FLAGS,LOC_GRANULARITY,GIND,CUR);
---
> DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR(OWNNAME, GSYS, GTEMP, GFXT,
> IGNORE_FLAGS,
> LOC_GRANULARITY, GIND, CUR);
35410,35412c35726,35730
< IF (AUTO AND GATHER_FIXED AND IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
< ADD_OBJECT_ELEM(OBJLIST_START, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
---
> IF (AUTO AND GATHER_FIXED AND
> IS_CURSOR_FXT(RECT.OWNNAME, RECT.OBJNAME)) THEN
> ADD_OBJECT_ELEM(OBJLIST_START, RECT.OWNNAME, RECT.OBJTYPE,
> RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
35414,35416c35732,35736
< IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME, RECT.OBJTYPE)) THEN
< ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
---
> IS_DICOBJ_FOR_STATS(RECT.OWNNAME, RECT.OBJNAME,
> RECT.OBJTYPE)) THEN
> ADD_OBJECT_ELEM(OBJLIST_END, RECT.OWNNAME, RECT.OBJTYPE,
> RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
35418,35422c35738,35744
< ADD_OBJECT_ELEM(OBJLIST2, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
< ELSE
< ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME,
< RECT.OBJTYPE, RECT.OBJNAME, RECT.PARTNAME, RECT.SUBPARTNAME, DSC_AUTO_FLAGS_NO_STATS);
---
> ADD_OBJECT_ELEM(OBJLIST2, RECT.OWNNAME, RECT.OBJTYPE, RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
> ELSE
> ADD_OBJECT_ELEM(OBJLIST, RECT.OWNNAME, RECT.OBJTYPE, RECT.OBJNAME,
> RECT.PARTNAME, RECT.SUBPARTNAME,
> DSC_AUTO_FLAGS_NO_STATS);
35490c35812,35813
< TRACE_TABLE('Start gather schema/db stats... owner: ' || OWNER || ' stattab: ' || STATTAB);
---
> TRACE_TABLE('Start gather schema/db stats... owner: ' || OWNER ||
> ' stattab: ' || STATTAB);
35502c35825,35826
< JOB_QUEUE_PROCESSES := TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes'));
---
> JOB_QUEUE_PROCESSES :=
> TO_NUMBER(DBMS_STATS_INTERNAL.GET_PARAMETER_VAL('job_queue_processes'));
35507c35831,35832
< JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(DSC_JOB_PREF || 'SD');
---
> JOB_NAME_PREFIX := DBMS_SCHEDULER.GENERATE_JOB_NAME(DSC_JOB_PREF ||
> 'SD');
35709c36034,36035
< GRANULARITY, CASCADE, FORCE, 'DATA', LOC_OBJ_FILTER_LIST);
---
> GRANULARITY, CASCADE, FORCE, 'DATA',
> LOC_OBJ_FILTER_LIST);
35735c36061,36062
< TRACE_TABLE('waiting for jobs in gather_schema_or_db_stats_aux: ' || JOBSTAB.COUNT);
---
> TRACE_TABLE('waiting for jobs in gather_schema_or_db_stats_aux: ' ||
> JOBSTAB.COUNT);
35742c36069,36070
< TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED || ' jobs were stopped.');
---
> TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED ||
> ' jobs were stopped.');
35747c36075,36076
< JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX, JOBSTAB, TRUE, TRUE);
---
> JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX,
> JOBSTAB, TRUE, TRUE);
35792a36122
>
36145a36476
>
36230,36237c36561,36567
< GATHER_SCHEMA_OR_DB_STATS(
< 'Database',
< NULL,ESTIMATE_PERCENT,BLOCK_SAMPLE,METHOD_OPT,
< DEGREE,GRANULARITY,CASCADE,STATTAB,STATID,
< OPTIONSU,TLIST,STATOWN,
< GATHER_SYS,NO_INVALIDATE,GATHER_TEMP,GATHER_FIXED, STATTYPEU,
< SYSTIMESTAMP, FALSE, OBJ_FILTER_LIST, COLLECTED_SOFAR, JOBSTAB, TRUE, NULL,
< CONCURRENT, OP_ID, REPORTING_MODE);
---
> GATHER_SCHEMA_OR_DB_STATS('Database', NULL, ESTIMATE_PERCENT, BLOCK_SAMPLE,
> METHOD_OPT, DEGREE, GRANULARITY, CASCADE,
> STATTAB, STATID, OPTIONSU, TLIST, STATOWN,
> GATHER_SYS, NO_INVALIDATE, GATHER_TEMP,
> GATHER_FIXED, STATTYPEU, SYSTIMESTAMP, FALSE,
> OBJ_FILTER_LIST, COLLECTED_SOFAR, JOBSTAB, TRUE,
> NULL, CONCURRENT, OP_ID, REPORTING_MODE);
36799a37130
>
39255a39587
>
39825,39827c40157,40160
< TRACE_TABLE('waiting for jobs in gather_dictionary_stats_aux: ' || JOBSTAB.COUNT);
< MONITORING_MAN_WAIT_FOR_JOBS(JOB_NAME_PREFIX, JSTATS,
< JOBSTAB, JOB_NAME_PREFIX, 'Dictionary Schema');
---
> TRACE_TABLE('waiting for jobs in gather_dictionary_stats_aux: ' ||
> JOBSTAB.COUNT);
> MONITORING_MAN_WAIT_FOR_JOBS(JOB_NAME_PREFIX, JSTATS, JOBSTAB,
> JOB_NAME_PREFIX, 'Dictionary Schema');
39832c40165,40166
< TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED || ' jobs were stopped.');
---
> TRACE_TABLE(JSTATS.FAILED || ' jobs failed and ' || JSTATS.STOPPED ||
> ' jobs were stopped.');
39835c40169,40170
< JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX, JOBSTAB, TRUE, TRUE);
---
> JOB_MAN_PERFORM_CLEANUPS(FORCE_DROP, FORCE_DROP, JOB_NAME_PREFIX,
> JOBSTAB, TRUE, TRUE);
41147a41483
>
41408c41744,41745
< DBMS_STATS_INTERNAL.PART_TYPES(OWNER, TABNAMEU, DSC_KGLNTABL, PTYPE, SPTYPE);
---
> DBMS_STATS_INTERNAL.PART_TYPES(OWNER, TABNAMEU, DSC_KGLNTABL, PTYPE,
> SPTYPE);
42927c43264
< FOR RECI IN SYS.DBMS_STATS_INTERNAL.ALL_INDEXES(OWNNAME,TABNAME, NULL,NULL)
---
> FOR RECI IN SYS.DBMS_STATS_INTERNAL.ALL_INDEXES(OWNNAME,TABNAME,NULL,NULL)
43501c43838
<
---
>
44052,44054c44389,44391
< DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST(SESID, SESSER, DEFAULT_GRANULARITY,
< NULL,
< TO_STALE_PERCENT_TYPE(GET_PREFS('STALE_PERCENT')));
---
> DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST(SESID, SESSER,
> DEFAULT_GRANULARITY, NULL,
> TO_STALE_PERCENT_TYPE(GET_PREFS('STALE_PERCENT')));
44637,44638c44974,44975
< RAISE_APPLICATION_ERROR (-20001,
< 'Invalid input value: valid values between 1 and 255 or DBMS_STATS.AUTO_TABLE_CACHED_BLOCKS');
---
> RAISE_APPLICATION_ERROR (-20001, 'Invalid input value: valid values ' ||
> 'between 1 and 255 or DBMS_STATS.AUTO_TABLE_CACHED_BLOCKS');
45456c45793,45794
< || ' and SYS_OP_MAP_NONNULL(s.statid) = SYS_OP_MAP_NONNULL(:statidU)';
---
> || ' and SYS_OP_MAP_NONNULL(s.statid) = '
> || ' SYS_OP_MAP_NONNULL(:statidU)';
45535a45874
>
45618a45958
>
45695a46036
>
45769a46111
>
46219a46562
>
46352a46696
>
46493a46838
>
47563,47564c47908,47909
< LINE_LOC := PAD_CHR(LINE_LOC || END_STR, DSC_EXTN_LEN) || DSC_HEADER_DELIM ||
< USAGE || DSC_NEW_LINE;
---
> LINE_LOC := PAD_CHR(LINE_LOC || END_STR, DSC_EXTN_LEN) ||
> DSC_HEADER_DELIM ||USAGE || DSC_NEW_LINE;
47748c48093,48094
< USED_CNT := REPORT_TAB_COL_USAGE(TREC.USER_NAME, TREC.OBJ_NAME, REPORT);
---
> USED_CNT := REPORT_TAB_COL_USAGE(TREC.USER_NAME, TREC.OBJ_NAME,
> REPORT);
48263,48264c48609,48611
< COMMON_HINTS VARCHAR2(32767)
< := 'dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring xmlindex_sel_idx_tbl ';
---
> COMMON_HINTS VARCHAR2(32767) := 'dbms_stats cursor_sharing_exact ' ||
> 'use_weak_name_resl dynamic_sampling(0) ' ||
> 'no_monitoring xmlindex_sel_idx_tbl ';
47a48
> DEQUEUE_OPTIONS.WAIT:=2;
284c285,293
<
---
> EXCEPTION
> WHEN OTHERS THEN
> IF DO_TRC THEN
> SYS.DBMS_ISCHED.TRACE_EMAIL('Failed to send email notification');
> SYS.DBMS_ISCHED.TRACE_EMAIL(DBMS_UTILITY.FORMAT_CALL_STACK);
> SYS.DBMS_ISCHED.TRACE_EMAIL(DBMS_UTILITY.FORMAT_ERROR_STACK);
> SYS.DBMS_ISCHED.TRACE_EMAIL(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
> END IF;
> RAISE;
1c1 < select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","INCREMENTAL_CHANGE#","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","DATAFILE_BLOCKS","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","COMPLETION_TIME","CONTROLFILE_TYPE","USED_CHANGE_TRACKING","BLOCKS_READ","USED_OPTIMIZATION","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","SECTION_SIZE","UNDO_OPTIMIZED","BLOCKS_SKIPPED_IN_CELL","CON_ID","BACKED_BY_PDB" from gv$backup_datafile --- > select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","INCREMENTAL_CHANGE#","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","DATAFILE_BLOCKS","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","COMPLETION_TIME","CONTROLFILE_TYPE","USED_CHANGE_TRACKING","BLOCKS_READ","USED_OPTIMIZATION","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","SECTION_SIZE","UNDO_OPTIMIZED","BLOCKS_SKIPPED_IN_CELL","CON_ID","BACKED_BY_PDB","GUID" from gv$backup_datafile
1c1 < select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","PIECE#","COPY#","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","CONCUR","TAG","STATUS","DELETED","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","BYTES","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","COMPRESSED","BACKED_BY_VSS","ENCRYPTED","BACKED_BY_OSB","FOR_XTTS","SAME_ENDIAN","CON_ID" from gv$backup_piece --- > select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","PIECE#","COPY#","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","CONCUR","TAG","STATUS","DELETED","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","BYTES","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","COMPRESSED","BACKED_BY_VSS","ENCRYPTED","BACKED_BY_OSB","FOR_XTTS","SAME_ENDIAN","CON_ID","GUID" from gv$backup_piece
1c1 < select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","BACKUP_TYPE","CONTROLFILE_INCLUDED","INCREMENTAL_LEVEL","PIECES","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","BLOCK_SIZE","INPUT_FILE_SCAN_ONLY","KEEP","KEEP_UNTIL","KEEP_OPTIONS","MULTI_SECTION","FOR_XTTS","SAME_ENDIAN","INC_DMPFILE","CON_ID" from gv$backup_set --- > select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","BACKUP_TYPE","CONTROLFILE_INCLUDED","INCREMENTAL_LEVEL","PIECES","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","BLOCK_SIZE","INPUT_FILE_SCAN_ONLY","KEEP","KEEP_UNTIL","KEEP_OPTIONS","MULTI_SECTION","FOR_XTTS","SAME_ENDIAN","INC_DMPFILE","CON_ID","GUID" from gv$backup_set
1c1 < select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","MODIFICATION_TIME","BYTES","COMPLETION_TIME","DB_UNIQUE_NAME","CON_ID" from gv$backup_spfile --- > select "INST_ID","RECID","STAMP","SET_STAMP","SET_COUNT","MODIFICATION_TIME","BYTES","COMPLETION_TIME","DB_UNIQUE_NAME","CON_ID","GUID" from gv$backup_spfile
1c1 < select "INST_ID","RECID","STAMP","NAME","TAG","FILE#","RFILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","ONLINE_FUZZY","BACKUP_FUZZY","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","DELETED","STATUS","COMPLETION_TIME","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","SCANNED","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","CONVERTED_FILE","SAME_ENDIAN","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","BACKED_BY_VSS","CON_ID","BACKED_BY_PDB" from gv$datafile_copy --- > select "INST_ID","RECID","STAMP","NAME","TAG","FILE#","RFILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","ONLINE_FUZZY","BACKUP_FUZZY","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","DELETED","STATUS","COMPLETION_TIME","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","SCANNED","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","CONVERTED_FILE","SAME_ENDIAN","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","BACKED_BY_VSS","CON_ID","BACKED_BY_PDB","GUID" from gv$datafile_copy
1c1 < select "INST_ID","RECID","STAMP","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","TAG","STATUS","DELETED","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","INCREMENTAL_LEVEL","ONLINE_FUZZY","BACKUP_FUZZY","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","CON_ID","BACKED_BY_PDB" from gv$proxy_datafile --- > select "INST_ID","RECID","STAMP","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","TAG","STATUS","DELETED","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","INCREMENTAL_LEVEL","ONLINE_FUZZY","BACKUP_FUZZY","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","CON_ID","BACKED_BY_PDB","GUID" from gv$proxy_datafile
1c1 < select "RECID","STAMP","SET_STAMP","SET_COUNT","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","INCREMENTAL_CHANGE#","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","DATAFILE_BLOCKS","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","COMPLETION_TIME","CONTROLFILE_TYPE","USED_CHANGE_TRACKING","BLOCKS_READ","USED_OPTIMIZATION","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","SECTION_SIZE","UNDO_OPTIMIZED","BLOCKS_SKIPPED_IN_CELL","CON_ID","BACKED_BY_PDB" from v$backup_datafile --- > select "RECID","STAMP","SET_STAMP","SET_COUNT","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","INCREMENTAL_CHANGE#","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","DATAFILE_BLOCKS","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","COMPLETION_TIME","CONTROLFILE_TYPE","USED_CHANGE_TRACKING","BLOCKS_READ","USED_OPTIMIZATION","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","SECTION_SIZE","UNDO_OPTIMIZED","BLOCKS_SKIPPED_IN_CELL","CON_ID","BACKED_BY_PDB","GUID" from v$backup_datafile
1c1 < select "RECID","STAMP","SET_STAMP","SET_COUNT","PIECE#","COPY#","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","CONCUR","TAG","STATUS","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","DELETED","BYTES","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","COMPRESSED","BACKED_BY_VSS","ENCRYPTED","BACKED_BY_OSB","FOR_XTTS","SAME_ENDIAN","CON_ID" from v$backup_piece --- > select "RECID","STAMP","SET_STAMP","SET_COUNT","PIECE#","COPY#","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","CONCUR","TAG","STATUS","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","DELETED","BYTES","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","COMPRESSED","BACKED_BY_VSS","ENCRYPTED","BACKED_BY_OSB","FOR_XTTS","SAME_ENDIAN","CON_ID","GUID" from v$backup_piece
1c1 < select "RECID","STAMP","SET_STAMP","SET_COUNT","BACKUP_TYPE","CONTROLFILE_INCLUDED","INCREMENTAL_LEVEL","PIECES","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","BLOCK_SIZE","INPUT_FILE_SCAN_ONLY","KEEP","KEEP_UNTIL","KEEP_OPTIONS","MULTI_SECTION","FOR_XTTS","SAME_ENDIAN","INC_DMPFILE","CON_ID" from v$backup_set --- > select "RECID","STAMP","SET_STAMP","SET_COUNT","BACKUP_TYPE","CONTROLFILE_INCLUDED","INCREMENTAL_LEVEL","PIECES","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","BLOCK_SIZE","INPUT_FILE_SCAN_ONLY","KEEP","KEEP_UNTIL","KEEP_OPTIONS","MULTI_SECTION","FOR_XTTS","SAME_ENDIAN","INC_DMPFILE","CON_ID","GUID" from v$backup_set
1c1 < select "RECID","STAMP","SET_STAMP","SET_COUNT","MODIFICATION_TIME","BYTES","COMPLETION_TIME","DB_UNIQUE_NAME","CON_ID" from v$backup_spfile --- > select "RECID","STAMP","SET_STAMP","SET_COUNT","MODIFICATION_TIME","BYTES","COMPLETION_TIME","DB_UNIQUE_NAME","CON_ID","GUID" from v$backup_spfile
1c1 < select "RECID","STAMP","NAME","TAG","FILE#","RFILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","ONLINE_FUZZY","BACKUP_FUZZY","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","DELETED","STATUS","COMPLETION_TIME","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","SCANNED","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","CONVERTED_FILE","SAME_ENDIAN","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","BACKED_BY_VSS","CON_ID","BACKED_BY_PDB" from v$datafile_copy --- > select "RECID","STAMP","NAME","TAG","FILE#","RFILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","INCREMENTAL_LEVEL","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","ONLINE_FUZZY","BACKUP_FUZZY","MARKED_CORRUPT","MEDIA_CORRUPT","LOGICALLY_CORRUPT","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","DELETED","STATUS","COMPLETION_TIME","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","SCANNED","IS_RECOVERY_DEST_FILE","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","CONVERTED_FILE","SAME_ENDIAN","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","BACKED_BY_VSS","CON_ID","BACKED_BY_PDB","GUID" from v$datafile_copy
1c1 < select "RECID","STAMP","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","TAG","STATUS","DELETED","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","INCREMENTAL_LEVEL","ONLINE_FUZZY","BACKUP_FUZZY","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","CON_ID","BACKED_BY_PDB" from v$proxy_datafile --- > select "RECID","STAMP","DEVICE_TYPE","HANDLE","COMMENTS","MEDIA","MEDIA_POOL","TAG","STATUS","DELETED","FILE#","CREATION_CHANGE#","CREATION_TIME","RESETLOGS_CHANGE#","RESETLOGS_TIME","CHECKPOINT_CHANGE#","CHECKPOINT_TIME","ABSOLUTE_FUZZY_CHANGE#","RECOVERY_FUZZY_CHANGE#","RECOVERY_FUZZY_TIME","INCREMENTAL_LEVEL","ONLINE_FUZZY","BACKUP_FUZZY","BLOCKS","BLOCK_SIZE","OLDEST_OFFLINE_RANGE","START_TIME","COMPLETION_TIME","ELAPSED_SECONDS","CONTROLFILE_TYPE","KEEP","KEEP_UNTIL","KEEP_OPTIONS","RMAN_STATUS_RECID","RMAN_STATUS_STAMP","FOREIGN_DBID","PLUGGED_READONLY","PLUGIN_CHANGE#","PLUGIN_RESETLOGS_CHANGE#","PLUGIN_RESETLOGS_TIME","CON_ID","BACKED_BY_PDB","GUID" from v$proxy_datafile
12.2.0.1
2492a2493,2498 > > > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PATCH%' THEN > RETURN 'Y'; > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PARAMETER%' THEN > RETURN 'Y';
6174c6174 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6380c6380 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6542c6542 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6629c6629 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 7779,7792d7778 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7832c7818,7830 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 7987c7985,7997 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
7779,7792d7778 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7832c7818,7830 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 7987c7985,7997 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
18.0.0.0
2570a2571,2576 > > > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PATCH%' THEN > RETURN 'Y'; > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PARAMETER%' THEN > RETURN 'Y';
495,498c495,503 < FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; --- > IF ( IPTN1 IS NULL ) THEN > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE); > ELSE > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; > END IF; 506,509c511,519 < FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; --- > IF ( IPTN2 IS NULL ) THEN > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE); > ELSE > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; > END IF; 517,520c527,535 < FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; --- > IF ( IPTN1 IS NULL ) THEN > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE); > ELSE > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; > END IF; 528,531c543,551 < FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; --- > IF ( IPTN2 IS NULL ) THEN > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE); > ELSE > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; > END IF;
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.09.01.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.09.02.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.09.01.00', '.');
< msn CONSTANT NUMBER := instr('18.09.01.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.09.01.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.09.02.00', '.');
> msn CONSTANT NUMBER := instr('18.09.02.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.09.02.00', '.', msn + 1);
29c29
< to_number(substr('18.09.01.00', 1, fsn - 1));
---
> to_number(substr('18.09.02.00', 1, fsn - 1));
31c31
< to_number(substr('18.09.01.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.09.02.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.09.01.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.09.02.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.09.01.00', psn + 1));
---
> to_number(substr('18.09.02.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.10.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.10.01.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.10.00.00', '.');
< msn CONSTANT NUMBER := instr('18.10.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.10.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.10.01.00', '.');
> msn CONSTANT NUMBER := instr('18.10.01.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.10.01.00', '.', msn + 1);
29c29
< to_number(substr('18.10.00.00', 1, fsn - 1));
---
> to_number(substr('18.10.01.00', 1, fsn - 1));
31c31
< to_number(substr('18.10.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.10.01.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.10.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.10.01.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.10.00.00', psn + 1));
---
> to_number(substr('18.10.01.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.10.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.11.00.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.10.00.00', '.');
< msn CONSTANT NUMBER := instr('18.10.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.10.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.11.00.00', '.');
> msn CONSTANT NUMBER := instr('18.11.00.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.11.00.00', '.', msn + 1);
29c29
< to_number(substr('18.10.00.00', 1, fsn - 1));
---
> to_number(substr('18.11.00.00', 1, fsn - 1));
31c31
< to_number(substr('18.10.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.11.00.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.10.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.11.00.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.10.00.00', psn + 1));
---
> to_number(substr('18.11.00.00', psn + 1));
13c13 < '18.9.1.0.0'; --- > '18.9.2.0.0';
13c13 < '18.10.0.0.0'; --- > '18.10.1.0.0';
13c13 < '18.10.0.0.0'; --- > '18.11.0.0.0';
667c667,672 < -- --- > -- p_cloud_service_type > -- (OUT) - 0 NONE > -- 1 DWCS (Autonomous Data Warehouse) > -- 2 EECS (Exadata Express Cloud Service) > -- 3 PAAS (Platform As A Service (MDBCS)) > -- 4 OLTP (ATP) 678c683,684 < p_packs OUT NUMBER --- > p_packs OUT NUMBER, > p_cloud_service_type OUT NUMBER
15a16,23 > -- Cloud Service Type Constants > CLOUD_SERVICE_TYPE_NONE CONSTANT VARCHAR2(30) := 'NONE'; > CLOUD_SERVICE_TYPE_ADW_D CONSTANT VARCHAR2(30) := 'ADW-D'; > CLOUD_SERVICE_TYPE_ADW_S CONSTANT VARCHAR2(30) := 'ADW-S'; > CLOUD_SERVICE_TYPE_ATP_D CONSTANT VARCHAR2(30) := 'ATP-D'; > CLOUD_SERVICE_TYPE_ATP_S CONSTANT VARCHAR2(30) := 'ATP-S'; > CLOUD_SERVICE_TYPE_OTHER CONSTANT VARCHAR2(30) := 'OTHER'; > 313a322,381 > > -------------------------- get_cloud_service_type -------------------------- > -- NAME: > -- get_cloud_service_type > -- > -- DESCRIPTION: > -- return value of _cloud_service_type parameter for cloud service type > -- > -- RETURN: > -- CLOUD_SERVICE_TYPE_NONE => 'NONE'; > -- CLOUD_SERVICE_TYPE_ADW_D => 'ADW-D'; > -- CLOUD_SERVICE_TYPE_ADW_S => 'ADW-S'; > -- CLOUD_SERVICE_TYPE_ATP_D => 'ATP-D'; > -- CLOUD_SERVICE_TYPE_ATP_S => 'ATP-S'; > -- CLOUD_SERVICE_TYPE_OTHER => 'OTHER'; > ----------------------------------------------------------------------------- > FUNCTION get_cloud_service_type > RETURN varchar2; > > -------------------------- get_tz_offset ----------------------------------- > -- NAME: > -- get_tz_offset > -- > -- DESCRIPTION: > -- get timezone offset from systimestamp > -- > -- RETURN: > -- timezone offset in TZ_HOUR:TZ_MINUTE format > ----------------------------------------------------------------------------- > FUNCTION get_tz_offset > RETURN VARCHAR2; > > ----------------------------- chooseAwrForPdb ------------------------- > -- NAME: > -- chooseAwrForPdb > -- > -- DESCRIPTION: > -- This function determines the location/prefix of the AWR view to use > -- for the database considering the following conditions: > -- 1. Check whether local awr_pdb has snapshots. > -- If not, return AWR_VIEW_ROOT > -- 2. If local awr has some snapshots use AWR_VIEW_PDB > -- 3. If by change local awr was stopped/disabled for some time > -- (say for eg., last 3 hrs not local awr snapshots) > -- then use AWR_VIEW_ROOT > -- > -- > -- NOTE: The beginTime and endTime used are in DB Timezone. > -- Unlike the case of ASH, no need to convert to UTC, > -- since end_interval_time in awr_root, awr_pdb are in same TZ > -- > -- PARAMETERS: > -- dbid (IN) - database id > -- > -- RETURN: > -- Returned type can be 'AWR_ROOT' or 'AWR_PDB'. > -- > ----------------------------------------------------------------------------- > FUNCTION chooseAwrForPdb(beginTime IN DATE) > RETURN VARCHAR2;
417a418,419 > > 429a432 > INCLUDE_SQLS IN NUMBER DEFAULT NULL, 882a886,904 > PROCEDURE CREATE_CONSUMER_GROUP_MAP( > P_CON_ID IN NUMBER, > P_AWR_PERIOD IN OUT NOCOPY PRVT_AWRV_METADATA, > P_CGRP_MAP IN OUT NOCOPY PRVT_AWRV_INSTTAB); > > > > > > > > > > > > > > > 911a934,1153 > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_RMMETRICS_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME IN DATE DEFAULT NULL, > END_TIME IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT 0) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_SQL_N_PARSE_TIME_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_WAIT_TIME_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_SYSMETRICS_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > FUNCTION GET_STORAGE_METRICS_XML( > SERVICE_TYPE IN VARCHAR2 DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > FUNCTION GET_SESSION_METRICS_XML( > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION REPORT_WORKLOAD( > SERVICE_TYPE IN VARCHAR2 DEFAULT NULL, > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME IN DATE DEFAULT NULL, > END_TIME IN DATE DEFAULT NULL, > REPORT_LEVEL IN VARCHAR2 DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT 0)
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.09.01.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.09.02.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.11.00.00'; 6266c6266 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6472c6472 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6634c6634 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6721c6721 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 7871,7884d7870 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7924c7910,7922 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 8079c8077,8089 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.01.00';
1055a1056,1060
> EXCEPTION
> WHEN OTHERS THEN
> CONTENT_TYPE := CONTENT_TYPE_XML;
> RETURN XMLTYPE('<mesg type="oraerr">'|| SQLERRM ||
> '</mesg>').GETCLOBVAL();
2011a2017,2021
>
>
>
>
>
2021c2031,2032
< P_PACKS OUT NUMBER
---
> P_PACKS OUT NUMBER,
> P_CLOUD_SERVICE_TYPE OUT NUMBER
2257a2269,2299
>
> IF (V_RESOLVED_DB_TYPE
> IN (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP))
> THEN
> SELECT CASE MAX(VALUE)
> WHEN 'DWCS' THEN 1
> WHEN 'EECS' THEN 2
> WHEN 'PAAS' THEN 3
> WHEN 'OLTP' THEN 4
> ELSE 0
> END
> INTO P_CLOUD_SERVICE_TYPE
> FROM SYS.AWR_PDB_PARAMETER
> WHERE DBID = P_DBID
> AND SNAP_ID = V_END_SNAP
> AND PARAMETER_NAME = '_cloud_service_type';
> ELSE
> SELECT CASE MAX(VALUE)
> WHEN 'DWCS' THEN 1
> WHEN 'EECS' THEN 2
> WHEN 'PAAS' THEN 3
> WHEN 'OLTP' THEN 4
> ELSE 0
> END
> INTO P_CLOUD_SERVICE_TYPE
> FROM SYS.AWR_ROOT_PARAMETER
> WHERE DBID = P_DBID
> AND SNAP_ID = V_END_SNAP
> AND PARAMETER_NAME = '_cloud_service_type';
> END IF;
>
25990a25991,26033 > > > > > > > > > > > > > > > > > > > > > > > > > > > > IF ( (LOCAL_DB = 1) > AND > (DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE() IN > (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)) > AND > (DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) > ) > THEN > TARGET_DBID := CON_DBID; > END IF; > >
593a594,750
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_CLOUD_SERVICE_TYPE
> RETURN VARCHAR2
> IS
> CLOUD_SERVICE_TYPE VARCHAR2(32);
> BEGIN
>
> SELECT
> CASE
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='PAAS' THEN
> CASE
> WHEN UPPER(MAX(PROPERTY_VALUE)) LIKE '%ADW.ORACLECLOUD.COM' THEN
> CLOUD_SERVICE_TYPE_ADW_D
> WHEN UPPER(MAX(PROPERTY_VALUE)) LIKE '%ATP.ORACLECLOUD.COM' THEN
> CLOUD_SERVICE_TYPE_ATP_D
> ELSE CLOUD_SERVICE_TYPE_OTHER
> END
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='DWCS' THEN
> CLOUD_SERVICE_TYPE_ADW_S
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='OLTP' THEN
> CLOUD_SERVICE_TYPE_ATP_S
> ELSE
> UPPER(NVL(SYS_CONTEXT('USERENV','CLOUD_SERVICE'),
> CLOUD_SERVICE_TYPE_NONE))
> END
> INTO CLOUD_SERVICE_TYPE
> FROM DATABASE_PROPERTIES
> WHERE UPPER(PROPERTY_NAME) = 'GLOBAL_DB_NAME';
>
> RETURN CLOUD_SERVICE_TYPE;
>
> END GET_CLOUD_SERVICE_TYPE;
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_TZ_OFFSET
> RETURN VARCHAR2
> IS
> L_TZ VARCHAR2(10);
> BEGIN
>
>
> L_TZ := EXTRACT(TIMEZONE_HOUR FROM SYSTIMESTAMP) || ':' ||
> EXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP);
> RETURN L_TZ;
> END GET_TZ_OFFSET;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION CHOOSEAWRFORPDB(
> BEGINTIME IN DATE)
> RETURN VARCHAR2
> IS
> L_AWR_LOCATION VARCHAR2(32) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> L_SQLTEXT VARCHAR2(4000);
> L_PDB_TIME DATE;
> L_ROOT_TIME DATE;
>
> BEGIN
>
>
> L_SQLTEXT :=
> 'SELECT CAST(MAX(end_interval_time) AS DATE)
> FROM AWR_PDB_SNAPSHOT
> WHERE dbid = :1';
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_PDB_TIME
> USING SYS_CONTEXT('USERENV', 'CON_DBID');
>
> IF L_PDB_TIME IS NULL THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> RETURN L_AWR_LOCATION;
> END IF;
>
> IF L_PDB_TIME >= BEGINTIME THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB;
> RETURN L_AWR_LOCATION;
> END IF;
>
>
>
>
> L_SQLTEXT :=
> 'SELECT CAST(MAX(end_interval_time) AS DATE)
> FROM AWR_ROOT_SNAPSHOT
> WHERE dbid = :1';
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_ROOT_TIME
> USING SYS_CONTEXT('USERENV', 'DBID');
>
> IF ((L_ROOT_TIME IS NOT NULL) AND
> (L_ROOT_TIME >= BEGINTIME)
> )
> THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> RETURN L_AWR_LOCATION;
>
> ELSE
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB;
> RETURN L_AWR_LOCATION;
> END IF;
>
> RETURN L_AWR_LOCATION;
>
> END CHOOSEAWRFORPDB;
>
7a8,13 > AWR_PREFIX_ROOT VARCHAR2(16) := 'sys.awr_root'; > AWR_PREFIX_PDB VARCHAR2(16) := 'sys.awr_pdb'; > G_CLOUD_SERVICE_TYPE CONSTANT VARCHAR2(32) := > DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE(); > > 379c385 < from sys.dba_hist_active_sess_history a --- > from #AWR_VIEW_PREFIX#_active_sess_history a 462c468 < from sys.dba_hist_pdb_instance)) c'); --- > from #AWR_VIEW_PREFIX#_pdb_instance)) c'); 485,502c491,550 < SELECT MIN(SNAP_ID) < INTO L_BEGIN_SNAP < FROM SYS.DBA_HIST_ASH_SNAPSHOT < WHERE DBID = L_DBID < AND INSTANCE_NUMBER = P_INST_ID < AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR P_START_TIME BETWEEN BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); < < < SELECT MAX(SNAP_ID) < INTO L_END_SNAP < FROM SYS.DBA_HIST_ASH_SNAPSHOT < WHERE DBID = L_DBID < AND INSTANCE_NUMBER = P_INST_ID < AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR P_END_TIME BETWEEN BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); --- > > IF ((G_CLOUD_SERVICE_TYPE IN > (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)) > AND > (L_IS_ROOT = FALSE)) > THEN > L_QRY := REPLACE(L_QRY,'#AWR_VIEW_PREFIX#', AWR_PREFIX_PDB); > > > SELECT MIN(SNAP_ID) > INTO L_BEGIN_SNAP > FROM SYS.AWR_PDB_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_START_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > > SELECT MAX(SNAP_ID) > INTO L_END_SNAP > FROM SYS.AWR_PDB_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_END_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > ELSE > > L_QRY := REPLACE(L_QRY,'#AWR_VIEW_PREFIX#', AWR_PREFIX_ROOT); > > > SELECT MIN(SNAP_ID) > INTO L_BEGIN_SNAP > FROM SYS.AWR_ROOT_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_START_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > > SELECT MAX(SNAP_ID) > INTO L_END_SNAP > FROM SYS.AWR_ROOT_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_END_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > END IF;
2530,2578d2529
< PROCEDURE I_CREATE_AWR_CG_MAP(
< P_CON_ID IN NUMBER,
< P_AWR_PERIOD IN OUT NOCOPY PRVT_AWRV_METADATA,
< P_CGRP_MAP IN OUT NOCOPY PRVT_AWRV_INSTTAB)
< IS
<
< SQLSTMT_MAP CONSTANT VARCHAR2(32767) := q'[
< select sys.prvt_awrv_inst(id, name)
< from (
< select distinct
< consumer_group_id id,
< consumer_group_name name
< from sys.awr_root_rsrc_consumer_group s
< where s.dbid = :m_dbid
< and s.snap_id > :m_begin_snap
< and s.snap_id <= :m_end_snap
< and s.con_dbid = :m_con_dbid
< and ]' || P_AWR_PERIOD.GET_INST_CLAUSE('s') ||')';
<
< BEGIN
< IF (P_CON_ID = 0 OR P_CON_ID > 2) THEN
< EXECUTE IMMEDIATE SQLSTMT_MAP
< BULK COLLECT INTO P_CGRP_MAP
< USING P_AWR_PERIOD.M_DBID,
< P_AWR_PERIOD.M_BEGIN_SNAP, P_AWR_PERIOD.M_END_SNAP,
< SYS.DBMS_SQLTUNE_UTIL0.CDBCON_ID_TO_DBID(P_CON_ID),
< P_AWR_PERIOD.M_INST_ID_LOW, P_AWR_PERIOD.M_INST_ID_HIGH,
< P_AWR_PERIOD.M_INST_ID_LIST;
< ELSE
<
< P_CGRP_MAP := PRVT_AWRV_INSTTAB();
< END IF;
< END I_CREATE_AWR_CG_MAP;
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
2883c2834,2835
< I_CREATE_AWR_CG_MAP(L_CON_ID, AWR_PERIOD, L_DIM_MAP);
---
> PRVT_AWR_VIEWER.CREATE_CONSUMER_GROUP_MAP(
> L_CON_ID, AWR_PERIOD, L_DIM_MAP);
1183a1184,1273
>
>
> RMMETRICS_COMMON CONSTANT VARCHAR2(32767) := q'[
> with rmmetrics_data as (-- autonomous DB workload main query
> select bucket_id,
> new_id consumer_group_id,
> case
> when rn = 1 and :is_awr = 1
> then (select /*+ cardinality(t 1) */ instance_name
> from table(cast(:p_contTab
> as sys.prvt_awrv_instTab)) t
> where t.inst_id = consumer_group_id)
> when rn = 1
> then consumer_group_name
> else null
> end consumer_group_name,
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts
> from ( -- generate an id since default ids can be high numbers
> select bucket_id,
> consumer_group_id,
> consumer_group_name,
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts,
> row_number() over (partition by consumer_group_id,
> consumer_group_name
> order by bucket_id,
> consumer_group_id,
> consumer_group_name) rn,
> -- generate an id
> dense_rank() over (order by consumer_group_id,
> consumer_group_name) new_id
> from (#GENERATE_METRICS_BUCKETID#) rsrc
> where avg_cpu_utilization + cpu_usage_per_sec +
> avg_running_stmts +
> avg_active_parallel_stmts + avg_queued_parallel_stmts > 0)
> )
>
> -- construct xml
> select xmlagg(
> nvl2(buckets,
> xmlelement("stattype",
> xmlattributes('rsrcmgrmetric' as "name"),
> xmlelement("stat_info",
> nvl(stat_id,
> xmlelement("stat",
> xmlattributes(
> consumer_group_id as "id",
> consumer_group_id as "name")))),
> #GENERATE_BUCKETS_TAG#),
> null))
> from ( -- aggregate buckets
> select #GENERATE_BUCKETID_TAG#,
> xmlagg(stat_id) stat_id,
> max(consumer_group_id) consumer_group_id
> from ( -- aggregate stats in each bucket
> select bucket_id,
> max(consumer_group_id) consumer_group_id,
> xmlagg(stat_id order by consumer_group_id) stat_id,
> xmlagg(xmlelement("stat",
> xmlattributes(consumer_group_id as "id",
> round(avg_cpu_utilization, 2) as "cpu",
> round(cpu_usage_per_sec, 2) as "cpuUsage",
> round(avg_running_stmts, 2) as "rst",
> round(avg_active_parallel_stmts, 2) as "apst",
> round(avg_queued_parallel_stmts, 2) as "qpst"
> )
> )
> order by consumer_group_id) stats
> from ( -- generate id name map
> select bucket_id, consumer_group_id,
> nvl2(consumer_group_name,
> xmlelement("stat",
> xmlattributes(consumer_group_id as "id",
> consumer_group_name as "name")),
> null) stat_id,
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts
> from rmmetrics_data)
> group by bucket_id))]';
>
1311a1402,1461
> PROCEDURE CREATE_CONSUMER_GROUP_MAP(
> P_CON_ID IN NUMBER,
> P_AWR_PERIOD IN OUT NOCOPY PRVT_AWRV_METADATA,
> P_CGRP_MAP IN OUT NOCOPY PRVT_AWRV_INSTTAB)
> IS
>
> L_QRY VARCHAR2(32767) := NULL;
>
>
> SQLSTMT_MAP CONSTANT VARCHAR2(32767) := q'[
> select sys.prvt_awrv_inst(id, name)
> from (
> select distinct
> consumer_group_id id,
> consumer_group_name name
> from sys.awr_root_rsrc_consumer_group s
> where s.dbid = :m_dbid
> and s.snap_id > :m_begin_snap
> and s.snap_id <= :m_end_snap
> and s.con_dbid = :m_con_dbid
> and ]' || P_AWR_PERIOD.GET_INST_CLAUSE('s') ||')';
>
> BEGIN
>
> L_QRY := SQLSTMT_MAP;
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(
> L_QRY, P_AWR_PERIOD.M_AWR_VIEW_PREFIX);
>
>
> IF (P_CON_ID = 0 OR P_CON_ID > 2) THEN
> EXECUTE IMMEDIATE L_QRY
> BULK COLLECT INTO P_CGRP_MAP
> USING P_AWR_PERIOD.M_DBID,
> P_AWR_PERIOD.M_BEGIN_SNAP, P_AWR_PERIOD.M_END_SNAP,
> SYS.DBMS_SQLTUNE_UTIL0.CDBCON_ID_TO_DBID(P_CON_ID),
> P_AWR_PERIOD.M_INST_ID_LOW, P_AWR_PERIOD.M_INST_ID_HIGH,
> P_AWR_PERIOD.M_INST_ID_LIST;
>
> ELSE
>
> P_CGRP_MAP := PRVT_AWRV_INSTTAB();
> END IF;
>
> END CREATE_CONSUMER_GROUP_MAP;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
16404a16555,16556
>
>
16416a16569
> INCLUDE_SQLS IN NUMBER DEFAULT NULL,
16601c16754
< IF (L_DIM_STAT IS NULL AND L_DIM_NAME IS NULL) THEN
---
> IF (INCLUDE_SQLS = 0) THEN
16602a16756,16758
> L_TOPSQL_XML := NULL;
>
> ELSE
16604,16626c16760
< IF (IS_REALTIME IS NULL OR IS_REALTIME = G_TIMEPICKER_HISTORICAL) THEN
<
< IF (L_START_TIME IS NOT NULL AND L_END_TIME IS NOT NULL AND
< (L_END_TIME - L_START_TIME)*24*60 < L_SNAPINT_MINS)
< THEN
< L_USEASH := TRUE;
< END IF;
<
<
< ELSE
< L_USEASH := TRUE;
< END IF;
<
<
< IF (L_USEASH) THEN
< SELECT XMLELEMENT("region_data",
< XMLAGG(
< XMLELEMENT("stattype",
< XMLATTRIBUTES('topsql' AS "name",
< '10' AS "topn",
< 'ash' AS "source"))))
< INTO L_TOPSQL_XML
< FROM SYS.DUAL;
---
> IF (L_DIM_STAT IS NULL AND L_DIM_NAME IS NULL) THEN
16629,16630c16763,16773
< IF (L_END_TIME IS NULL) THEN
< L_END_TIME := SYSDATE;
---
> IF (IS_REALTIME IS NULL OR IS_REALTIME = G_TIMEPICKER_HISTORICAL) THEN
>
> IF (L_START_TIME IS NOT NULL AND L_END_TIME IS NOT NULL AND
> (L_END_TIME - L_START_TIME)*24*60 < L_SNAPINT_MINS)
> THEN
> L_USEASH := TRUE;
> END IF;
>
>
> ELSE
> L_USEASH := TRUE;
16633,16635d16775
< IF (L_START_TIME IS NULL) THEN
< L_START_TIME := L_END_TIME - 1/24;
< END IF;
16637,16646c16777,16805
< L_TOPSQL_XML := L_TOPSQL_XML.APPENDCHILDXML('/*/stattype',
< SYS.DBMS_ASH_INTERNAL.REPORT_ASHVIEWER_XML(
< DBID => L_DBID,
< INST_ID => L_INST_ID,
< BEGIN_TIME =>
< TO_CHAR(L_START_TIME,'hh24:mi:ss mm/dd/yyyy'),
< END_TIME =>
< TO_CHAR(L_END_TIME,'hh24:mi:ss mm/dd/yyyy'),
< REPORT_LEVEL=>'<sqlid,wait_class>{treemap}',
< PARENT_REPORT => 'topsql'));
---
> IF (L_USEASH) THEN
> SELECT XMLELEMENT("region_data",
> XMLAGG(
> XMLELEMENT("stattype",
> XMLATTRIBUTES('topsql' AS "name",
> '10' AS "topn",
> 'ash' AS "source"))))
> INTO L_TOPSQL_XML
> FROM SYS.DUAL;
>
>
> IF (L_END_TIME IS NULL) THEN
> L_END_TIME := SYSDATE;
> END IF;
>
> IF (L_START_TIME IS NULL) THEN
> L_START_TIME := L_END_TIME - 1/24;
> END IF;
>
> L_TOPSQL_XML := L_TOPSQL_XML.APPENDCHILDXML('/*/stattype',
> SYS.DBMS_ASH_INTERNAL.REPORT_ASHVIEWER_XML(
> DBID => L_DBID,
> INST_ID => L_INST_ID,
> BEGIN_TIME =>
> TO_CHAR(L_START_TIME,'hh24:mi:ss mm/dd/yyyy'),
> END_TIME =>
> TO_CHAR(L_END_TIME,'hh24:mi:ss mm/dd/yyyy'),
> REPORT_LEVEL =>'<sqlid,wait_class>{treemap}',
> PARENT_REPORT => 'topsql'));
16648c16807
< ELSE
---
> ELSE
16650,16673c16809,16834
<
< L_TOPSQL_XML := I_REP_AWRDATA_XML(
< START_TIME => L_START_TIME,
< END_TIME => L_END_TIME,
< TIMEPICKER_START => NULL,
< TIMEPICKER_END => NULL,
< INSTANCE_LIST => L_INSTANCE_LIST,
< DBID => L_DBID,
< BUCKET_MAX_COUNT => 1,
< TIME_MODEL => 'no',
< WAIT_CLASS => 'no',
< WAIT_EVENT => 'no',
< EVENT_CLASS => 'no',
< SYSSTAT => 'no',
< SQLSTAT => 'EM_TOP_SQL',
< OSSTAT => 'no',
< IOSTAT => 'no',
< MEMORY => 'no',
< SPACE => 'no',
< KEY_STATISTICS => 'no',
< INST_DETAIL => L_SHOW_INST_DETAIL,
< MEMBERS => 'no',
< SUMMARY => 'no',
< SHOW_SQL => SHOW_SQL);
---
>
> L_TOPSQL_XML := I_REP_AWRDATA_XML(
> START_TIME => L_START_TIME,
> END_TIME => L_END_TIME,
> TIMEPICKER_START => NULL,
> TIMEPICKER_END => NULL,
> INSTANCE_LIST => L_INSTANCE_LIST,
> DBID => L_DBID,
> BUCKET_MAX_COUNT => 1,
> TIME_MODEL => 'no',
> WAIT_CLASS => 'no',
> WAIT_EVENT => 'no',
> EVENT_CLASS => 'no',
> SYSSTAT => 'no',
> SQLSTAT => 'EM_TOP_SQL',
> OSSTAT => 'no',
> IOSTAT => 'no',
> MEMORY => 'no',
> SPACE => 'no',
> KEY_STATISTICS => 'no',
> INST_DETAIL => L_SHOW_INST_DETAIL,
> MEMBERS => 'no',
> SUMMARY => 'no',
> SHOW_SQL => SHOW_SQL);
> END IF;
> END IF;
16675d16835
< END IF;
18086a18247,20960
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_RMMETRICS_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME IN DATE DEFAULT NULL,
> END_TIME IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT 0)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME DATE := START_TIME;
> L_END_TIME DATE := END_TIME;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(10) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_BUCKET_MAP PRVT_AWRV_MAPTAB;
>
>
> L_CON_ID NUMBER;
> L_CON_DBID NUMBER;
>
>
> L_RESOURCE_MANAGER_ENABLED NUMBER := 0;
>
>
> L_NUM_CPUS NUMBER := NULL;
>
>
> L_CG_MAP PRVT_AWRV_INSTTAB := NULL;
>
>
> RMMETRICS_RT CONSTANT VARCHAR2(32767) := q'[
> select bucket_id,
> consumer_group_id, consumer_group_name,
> case
> when avg(avg_cpu_utilization) > 100 then 100
> else avg(avg_cpu_utilization)
> end avg_cpu_utilization,
> avg(cpu_usage_per_sec) cpu_usage_per_sec,
> sum(avg_running_stmts) avg_running_stmts,
> sum(avg_active_parallel_stmts)
> avg_active_parallel_stmts,
> sum(avg_queued_parallel_stmts)
> avg_queued_parallel_stmts
> from table(sys.gv$(cursor(
> select trunc(
> ((extract(day from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> * 86400 +
> extract(hour from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> * 3600 +
> extract(minute from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> * 60 +
> extract(second from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> )
> / :p_bucket_interval)) + 1 bucket_id,
> consumer_group_name,
> consumer_group_id,
> (case
> -- resource manager enabled, use running_sessions_limit
> when :resource_manager_enabled > 0 then
> (case
> -- if running_sessions_limit is not set
> when running_sessions_limit is null or
> running_sessions_limit = 0 then
> avg_cpu_utilization
> else
> (avg_running_sessions/running_sessions_limit)*100
> end)
> -- resource manager disabled, use system cpu limit
> else
> (case
> when :num_cpus > 0 then
> (avg_running_sessions/:num_cpus)*100
> -- system cpu limit not available
> -- use running_sessions_limit
> else
> (case
> when running_sessions_limit is null or
> running_sessions_limit = 0 then
> avg_cpu_utilization
> else
> (avg_running_sessions/running_sessions_limit)*100
> end)
> end)
> end) avg_cpu_utilization,
> cpu_consumed_time/(intsize_csec*10) cpu_usage_per_sec,
> avg_running_sessions + avg_waiting_sessions
> as avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts
> from sys.v_$rsrcmgrmetric_history
> where end_time >= to_date(:b_start_time, :date_fmt)
> and end_time < to_date(:b_end_time, :date_fmt))))
> group by bucket_id, consumer_group_id, consumer_group_name]';
>
>
> RMMETRICS_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var is_awr number;
> var p_contTab prvt_awrv_instTab;
> var b_start_time varchar2(4000);
> var b_end_time varchar2(4000);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_min_time varchar2(4000);
> var b_max_time varchar2(4000);
> var b_duration number;
> var date_fmt varchar2(4000);
> var resource_manager_enabled number;
> var num_cpus number;
> begin
> :is_awr := #is_awr#;
> :p_contTab := #p_contTab#;
> :b_start_time := '#b_start_time#';
> :b_end_time := '#b_end_time#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_min_time := '#b_min_time#';
> :b_max_time := '#b_max_time#';
> :b_duration := #b_duration#;
> :date_fmt := '#date_fmt#';
> :resource_manager_enabled := #resource_manager_enabled#;
> :num_cpus := #num_cpus#;
> end;
> /]';
>
>
> RMMETRICS_AWR CONSTANT VARCHAR2(32767) := q'[
> select bucket_id,
> consumer_group_id,
> consumer_group_name,
> case
> when sum(avg_cpu_utilization) > 100 then 100
> else sum(avg_cpu_utilization)
> end avg_cpu_utilization,
> sum(cpu_usage_per_sec) cpu_usage_per_sec,
> sum(avg_running_stmts) avg_running_stmts,
> sum(avg_active_parallel_stmts) avg_active_parallel_stmts,
> sum(avg_queued_parallel_stmts) avg_queued_parallel_stmts
> from (
> select bucket_id,
> consumer_group_name,
> consumer_group_id,
> -- avg
> avg(avg_cpu_utilization) avg_cpu_utilization,
> avg(cpu_usage_per_sec) cpu_usage_per_sec,
> avg(avg_running_stmts) avg_running_stmts,
> avg(avg_active_parallel_stmts)
> avg_active_parallel_stmts,
> avg(avg_queued_parallel_stmts)
> avg_queued_parallel_stmts
> from table(cast(:bucket_map as sys.prvt_awrv_mapTab)) b,
> (select /*+ no_merge */ nvl(m.snap_id, c.snap_id) as snap_id,
> nvl(m.instance_number, c.instance_number)
> as instance_number,
> m.consumer_group_id consumer_group_id,
> null consumer_group_name,
> case
> when c.cpu_limit is null or
> c.cpu_limit = 0 then
> m.avg_cpu_utilization
> else
> (m.avg_running_sessions/c.cpu_limit)*100
> end as avg_cpu_utilization,
> m.cpu_consumed_time/(m.intsize_csec*10) cpu_usage_per_sec,
> m.avg_running_sessions + m.avg_waiting_sessions
> as avg_running_stmts,
> m.avg_active_parallel_stmts as avg_active_parallel_stmts,
> m.avg_queued_parallel_stmts as avg_queued_parallel_stmts
> from awr_root_rsrc_metric m,
> (SELECT /*+ no_merge */
> nvl(s.snap_id, p.snap_id) as snap_id,
> nvl(s.instance_number, p.instance_number)
> as instance_number,
> CASE WHEN p.cpu_count IS NULL
> THEN nvl(s.num_cpus, s.num_cpu_cores)
> ELSE LEAST(p.cpu_count,
> NVL(s.num_cpus, s.num_cpu_cores))
> END as cpu_limit
> FROM
> (SELECT /*+ NO_MERGE */ snap_id, instance_number,
> MAX(num_cpus) num_cpus,
> MAX(num_cpu_cores) num_cpu_cores
> FROM
> (SELECT snap_id, instance_number,
> CASE
> WHEN stat_name = 'NUM_CPUS'
> THEN value
> ELSE NULL
> END as num_cpus,
> CASE
> WHEN stat_name = 'NUM_CPU_CORES'
> THEN value
> ELSE NULL
> END as num_cpu_cores
> FROM awr_root_osstat
> WHERE stat_name IN
> ('NUM_CPUS','NUM_CPU_CORES'))
> GROUP BY snap_id, instance_number) s,
> (SELECT /*+ NO_MERGE */ snap_id, instance_number,
> MAX(
> CASE
> WHEN resource_plan IS NULL THEN NULL
> ELSE TO_NUMBER(cpu_count)
> END) as cpu_count
> FROM
> (SELECT snap_id, instance_number,
> CASE
> WHEN parameter_name = 'cpu_count'
> THEN value
> ELSE NULL
> END cpu_count,
> CASE
> WHEN parameter_name =
> 'resource_manager_plan'
> THEN value
> ELSE NULL
> END resource_plan
> FROM awr_root_parameter
> WHERE parameter_name IN
> ('cpu_count', 'resource_manager_plan'))
> GROUP BY snap_id, instance_number) p
> WHERE s.snap_id = p.snap_id
> AND s.instance_number = p.instance_number) c
> where m.dbid = :m_dbid
> and m.snap_id between :m_begin_snap and :m_end_snap
> and m.con_dbid = :l_con_dbid
> and m.snap_id = c.snap_id(+)
> and m.instance_number = c.instance_number(+)) y
> where b.snap_id = y.snap_id
> and b.instance_number = y.instance_number
> group by bucket_id,
> y.instance_number,
> y.consumer_group_id,
> y.consumer_group_name)
> group by bucket_id,
> consumer_group_id,
> consumer_group_name]';
>
>
> RMMETRICS_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var is_awr number;
> var p_contTab prvt_awrv_instTab;
> var bucket_map prvt_awrv_mapTab;
> var m_dbid number;
> var m_begin_snap number;
> var m_end_snap number;
> var l_con_dbid number;
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_min_time varchar2(4000);
> var b_max_time varchar2(4000);
> var b_duration number;
> begin
> :is_awr := #is_awr#;
> :p_contTab := #p_contTab#;
> :bucket_map := #bucket_map#;
> :m_dbid := #m_dbid#;
> :m_begin_snap := #m_begin_snap#;
> :m_end_snap := #m_end_snap#;
> :l_con_dbid := #l_con_dbid#;
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_min_time := '#b_min_time#';
> :b_max_time := '#b_max_time#';
> :b_duration := #b_duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME IS NULL) THEN
> L_END_TIME := SYSDATE;
> END IF;
>
>
> IF (START_TIME IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME := L_END_TIME - 1/24;
>
> ELSE
> L_START_TIME := L_END_TIME - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
>
> BEGIN
> SELECT COUNT(VALUE)
> INTO L_RESOURCE_MANAGER_ENABLED
> FROM SYS.V_$SYSTEM_PARAMETER2
> WHERE NAME = 'resource_manager_plan'
> AND (VALUE IS NOT NULL AND VALUE != '');
> EXCEPTION
> WHEN OTHERS THEN
> L_RESOURCE_MANAGER_ENABLED := 0;
> END;
>
>
> BEGIN
> SELECT SUM(NUM_CPUS)
> INTO L_NUM_CPUS
> FROM (
> SELECT HOST_NAME, SUM(NUM_CPUS) AS NUM_CPUS
> FROM TABLE(GV$(CURSOR(
> SELECT I.INSTANCE_NUMBER AS INST_ID, I.HOST_NAME,
> NVL(OS.NUM_CPUS, OS.NUM_CPU_CORES) AS NUM_CPUS
> FROM SYS.V$INSTANCE I,
> (SELECT MAX(DECODE(STAT_NAME, 'NUM_CPUS',
> VALUE, NULL)) AS NUM_CPUS,
> MAX(DECODE(STAT_NAME, 'NUM_CPU_CORES',
> VALUE, NULL)) AS NUM_CPU_CORES
> FROM SYS.V$OSSTAT
> WHERE STAT_NAME IN ('NUM_CPUS', 'NUM_CPU_CORES')
> ) OS)))
> GROUP BY HOST_NAME);
> EXCEPTION
> WHEN OTHERS THEN
> L_NUM_CPUS := 0;
> END;
>
>
> L_QRY := RMMETRICS_COMMON;
>
>
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETS_TAG#',
> GENERATE_BUCKETS_TAG2);
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETID_TAG#',
> GENERATE_BUCKETID_TAG);
> L_QRY := REPLACE(L_QRY,'#GENERATE_METRICS_BUCKETID#',
> RMMETRICS_RT);
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := RMMETRICS_RT_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#is_awr#', 0);
> L_SQL := REPLACE(L_SQL, '#p_contTab#', 'null');
> L_SQL := REPLACE(L_SQL, '#b_start_time#',
> TO_CHAR(L_START_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time#',
> TO_CHAR(L_END_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_min_time#', TO_CHAR(L_START_TIME,
> DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_max_time#', TO_CHAR(L_END_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND((L_END_TIME - L_START_TIME)*DTOS));
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
>
> L_SQL := REPLACE(L_SQL, '#resource_manager_enabled#',
> L_RESOURCE_MANAGER_ENABLED);
>
> L_SQL := REPLACE(L_SQL, '#num_cpus#', L_NUM_CPUS);
>
> L_RESULT_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_SQL);
>
> ELSE
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING 0, L_CG_MAP,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_RESOURCE_MANAGER_ENABLED,
> L_NUM_CPUS, L_NUM_CPUS,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME, DATE_FMT), DATE_FMT,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME,DATE_FMT), TO_CHAR(L_END_TIME,DATE_FMT),
> (L_END_TIME - L_START_TIME)*DTOS;
> END IF;
>
>
> ELSE
>
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
> CREATE_BUCKET_SNAP_MAP(L_AWR_PERIOD, L_BUCKET_MAP,
> L_BUCKET_COUNT, L_BUCKET_INTERVAL);
>
> L_CON_ID := SYS_CONTEXT('USERENV','CON_ID');
>
> CREATE_CONSUMER_GROUP_MAP(L_CON_ID, L_AWR_PERIOD, L_CG_MAP);
>
>
> L_QRY := RMMETRICS_COMMON;
>
>
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETS_TAG#',
> GENERATE_BUCKETS_TAG2);
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETID_TAG#',
> GENERATE_BUCKETID_TAG);
> L_QRY := REPLACE(L_QRY,'#GENERATE_METRICS_BUCKETID#',
> RMMETRICS_AWR);
>
>
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := RMMETRICS_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#is_awr#', 1);
> L_SQL := REPLACE(L_SQL, '#p_contTab#', '');
> L_SQL := REPLACE(L_SQL, '#bucket_map#', '');
> L_SQL := REPLACE(L_SQL, '#m_dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#m_begin_snap#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#m_end_snap#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#l_con_dbid#', L_CON_DBID);
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_min_time#',
> TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_max_time#',
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_AWR_PERIOD.M_MAX_TIME,
> L_AWR_PERIOD.M_MIN_TIME)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING 1,
> L_CG_MAP,
> L_BUCKET_MAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_CON_DBID,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT),
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT),
> ROUND(
> INTERVAL_TO_SECOND(
> L_AWR_PERIOD.M_MAX_TIME, L_AWR_PERIOD.M_MIN_TIME));
> END IF;
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_RMMETRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SQL_N_PARSE_TIME_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> SQL_AND_PARSE_TIME_RT CONSTANT VARCHAR2(32767) := q'[
> with base_data as (
> SELECT bucket_id,
> SUM(parse_time_sec) / :p_bucket_interval AS parse_aas,
> SUM(sql_exec_time_sec) / :p_bucket_interval AS sql_exec_aas,
> SUM(plsql_exec_time_sec) / :p_bucket_interval AS plsql_exec_aas
> FROM TABLE(GV$(CURSOR(
> SELECT bucket_id,
> SUM(parse_time_usec) / 1000000 as parse_time_sec,
> SUM(sql_exec_time_usec) / 1000000 as sql_exec_time_sec,
> SUM(plsql_exec_time_usec) / 1000000
> as plsql_exec_time_sec
> FROM (
> SELECT TRUNC(((
> cast(sample_time_utc as date) -
> to_date(:b_start_time_utc, :date_fmt))
> * 86400 ) / :p_bucket_interval) + 1
> as bucket_id,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_parse = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as parse_time_usec,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_sql_execution = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as sql_exec_time_usec,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_plsql_execution = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as plsql_exec_time_usec
> FROM sys.v_$active_session_history
> WHERE sample_time_utc > to_timestamp(
> :b_start_time_utc,
> :date_fmt)
> AND sample_time_utc <= to_timestamp(
> :b_end_time_utc,:date_fmt)
> )
> WHERE bucket_id > 0
> GROUP BY bucket_id
> )))
> GROUP BY bucket_id
> ORDER BY bucket_id)
> select xmlelement("stattype",
> xmlattributes('sql' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlforest(round(parse_aas, 2) as "parse_aas",
> round(sql_exec_aas, 2) as "sql_aas",
> round(plsql_exec_aas, 2) as "plsql_aas")))))
> from base_data
> where (parse_aas + sql_exec_aas + plsql_exec_aas) > 0]';
>
>
> SQL_AND_PARSE_TIME_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
>
> SQL_AND_PARSE_TIME_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id, s.stat_name,
> s.value / 1000000 as value_secs
> FROM awr_root_con_sys_time_model s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.stat_name IN ('parse time elapsed',
> 'sql execute elapsed time',
> 'PL/SQL execution elapsed time')
> ),
> diff_stats AS
> (SELECT estat.instance_number, estat.snap_id, estat.stat_name,
> s.begin_time_utc, s.end_time_utc,
> GREATEST(estat.value_secs -
> (s.diff_logic * NVL(bstat.value_secs,0)),0) /
> ((s.end_time_utc - s.begin_time_utc)*86400)
> as value_per_sec
> FROM base_stats estat, snaps s, base_stats bstat
> WHERE estat.instance_number = s.instance_number
> AND estat.snap_id = s.snap_id
> AND estat.instance_number = bstat.instance_number(+)
> AND estat.snap_id-1 = bstat.snap_id(+)
> AND estat.stat_name = bstat.stat_name(+)
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> final_stats AS
> (SELECT bucket_id, stat_name,
> SUM(value_per_sec * bucket_ratio) as aas
> FROM (
> SELECT b.bucket_id, s.stat_name, s.value_per_sec,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM diff_stats s, buckets b
> WHERE s.value_per_sec > 0
> AND b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, stat_name
> ),
> pivoted_stats AS
> (SELECT * FROM final_stats
> PIVOT(SUM(aas) FOR stat_name IN
> ('parse time elapsed' as parse_aas,
> 'sql execute elapsed time' as sql_exec_aas,
> 'PL/SQL execution elapsed time' as plsql_exec_aas)
> )
> ),
> base_data AS
> (SELECT bucket_id, parse_aas, sql_exec_aas, plsql_exec_aas
> FROM pivoted_stats
> ORDER BY bucket_id)
> select xmlelement("stattype",
> xmlattributes('sql' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlforest(round(parse_aas, 2) as "parse_aas",
> round(sql_exec_aas, 2) as "sql_aas",
> round(plsql_exec_aas, 2) as "plsql_aas")))))
> from base_data
> where (parse_aas + sql_exec_aas + plsql_exec_aas) > 0]';
>
>
> SQL_AND_PARSE_TIME_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := SQL_AND_PARSE_TIME_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SQL_AND_PARSE_TIME_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('sql_and_parse_time', L_SQL);
>
> ELSE
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := SQL_AND_PARSE_TIME_AWR;
>
>
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SQL_AND_PARSE_TIME_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#', ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('sql_and_parse_time', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND(
> INTERVAL_TO_SECOND(L_END_TIME_UTC, L_START_TIME_UTC));
>
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SQL_N_PARSE_TIME_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_WAIT_TIME_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> WAIT_TIME_RT CONSTANT VARCHAR2(32767) := q'[
> WITH
> inst_data AS
> (SELECT inst_id, bucket_id, metric_name, value
> FROM TABLE(GV$(CURSOR(
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id, metric_name,
> SUM(value*bucket_ratio) as value
> FROM (
> SELECT USERENV('INSTANCE') as inst_id,
> buckets.bucket_id,
> met.metric_name,
> met.value,
> (LEAST(met.end_time_utc,
> buckets.end_time_utc) -
> GREATEST(met.begin_time_utc,
> buckets.begin_time_utc)) /
> (met.end_time_utc - met.begin_time_utc)
> as bucket_ratio
> FROM (
> SELECT /*+ no_merge */ USERENV('INSTANCE')
> as inst_id,
> m.begin_time-tz.time_zone
> as begin_time_utc,
> m.end_time-tz.time_zone
> as end_time_utc,
> CASE
> WHEN m.metric_name =
> 'Average Active Sessions'
> THEN 'DBTime'
> ELSE 'CPU'
> END as metric_name,
> CASE
> WHEN m.metric_name =
> 'CPU Usage Per Sec'
> THEN m.value*m.intsize_csec/10000
> ELSE m.value*m.intsize_csec/100
> END as value
> FROM sys.v_$con_sysmetric_history m,
> (SELECT ROUND(
> (cast(latest_sample_time
> as date) -
> cast(sys_extract_utc(
> systimestamp)
> as date))
> *900,0)/900 as time_zone
> FROM sys.v_$ash_info) tz
> WHERE m.group_id = 18
> AND m.metric_name IN
> ('Average Active Sessions',
> 'CPU Usage Per Sec')
> AND m.begin_time-tz.time_zone <
> to_date(:b_end_time_utc, :date_fmt)
> AND m.end_time-tz.time_zone >=
> to_date(:b_start_time_utc, :date_fmt)
> ) met,
> (
> SELECT /*+ no_merge */ level as bucket_id,
> to_date(:b_start_time_utc,:date_fmt) +
> ((level -1) * :p_bucket_interval
> / 86400) as begin_time_utc,
> to_date(:b_start_time_utc,:date_fmt) +
> (level * :p_bucket_interval / 86400)
> as end_time_utc
> FROM sys.v_$instance
> -- note: DUAL not allowed inside GV$
> CONNECT BY level <=
> (to_date(:b_end_time_utc,
> :date_fmt) -
> to_date(:b_start_time_utc,
> :date_fmt))
> * 86400 / :p_bucket_interval
> ) buckets
> WHERE buckets.begin_time_utc < met.end_time_utc
> AND buckets.end_time_utc > met.begin_time_utc
> )
> GROUP BY bucket_id, metric_name
> UNION ALL
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id,
> metric_name,
> SUM(value) as value
> FROM (
> SELECT TRUNC(((cast(sample_time_utc as date) -
> to_date(:b_start_time_utc,
> :date_fmt)) * 86400) /
> :p_bucket_interval) + 1 AS bucket_id,
> DECODE(session_state, 'WAITING', wait_class,
> 'ASH_CPU')
> AS metric_name,
> CASE
> WHEN session_type = 'FOREGROUND'
> THEN usecs_per_row/1000000
> ELSE 0
> END AS value
> FROM sys.v_$active_session_history
> WHERE sample_time_utc >=
> to_timestamp(:b_start_time_utc, :date_fmt)
> AND sample_time_utc <
> to_timestamp(:b_end_time_utc, :date_fmt)
> )
> WHERE bucket_id > 0
> GROUP BY bucket_id, metric_name
> )))),
> db_data AS
> (SELECT bucket_id, metric_name,
> SUM(value) as value
> FROM inst_data
> GROUP BY bucket_id, metric_name
> ),
> wait_for_cpu AS
> (SELECT bucket_id, 'wait for CPU' as metric_name,
> GREATEST(SUM(DECODE(metric_name, 'ASH_CPU', value,
> -value)), 0) AS value
> FROM db_data
> WHERE metric_name IN ('CPU', 'ASH_CPU')
> GROUP BY bucket_id
> ),
> final_data AS
> (SELECT bucket_id, metric_name,
> value / :p_bucket_interval AS value
> FROM db_data
> WHERE metric_name <> 'ASH_CPU'
> AND value > 0
> UNION ALL
> SELECT bucket_id, metric_name,
> value /:p_bucket_interval AS value
> FROM wait_for_cpu
> WHERE value > 0
> ),
> base_data AS
> (SELECT * FROM final_data
> ORDER BY bucket_id, metric_name)
> select xmlelement("stattype",
> xmlattributes('wait_time' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")
> ))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> WAIT_TIME_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
> WAIT_TIME_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT e.instance_number, e.snap_id, e.wait_class,
> SUM(e.time_waited_micro_fg)/1000000 as value
> FROM awr_root_con_system_event e
> WHERE e.dbid = :dbid
> AND e.snap_id >= :begin_snap_id
> AND e.snap_id <= :end_snap_id
> AND e.wait_class <> 'Idle'
> GROUP BY e.instance_number, e.snap_id, e.wait_class
> UNION ALL
> SELECT s.instance_number, s.snap_id,
> CASE
> WHEN s.stat_name = 'DB time'
> THEN 'DBTime'
> ELSE 'CPU'
> END as wait_class,
> s.value/1000000 as value
> FROM awr_root_con_sys_time_model s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.stat_name IN ('DB time', 'DB CPU')
> ),
> agg_stats AS
> (SELECT /*+ no_merge */ instance_number, snap_id, wait_class,
> SUM(value) as value
> FROM base_stats
> WHERE value > 0
> GROUP BY instance_number, snap_id, wait_class
> ),
> diff_stats AS
> (SELECT estat.instance_number, estat.snap_id, estat.wait_class,
> s.begin_time_utc, s.end_time_utc,
> GREATEST(estat.value -
> (s.diff_logic * NVL(bstat.value,0)),0) /
> ((s.end_time_utc - s.begin_time_utc)*86400)
> as value
> FROM agg_stats estat, snaps s, agg_stats bstat
> WHERE estat.instance_number = s.instance_number
> AND estat.snap_id = s.snap_id
> AND estat.instance_number = bstat.instance_number(+)
> AND estat.snap_id-1 = bstat.snap_id(+)
> AND estat.wait_class = bstat.wait_class(+)
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> db_stats AS
> (SELECT bucket_id, wait_class,
> SUM(value * bucket_ratio) as value
> FROM (
> SELECT b.bucket_id, s.wait_class, s.value,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM diff_stats s, buckets b
> WHERE b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, wait_class
> ),
> wait_for_cpu AS
> (SELECT bucket_id, 'wait for CPU' as wait_class,
> GREATEST(SUM(DECODE(wait_class, 'DBTime', value, -value)),
> 0) as value
> FROM db_stats
> GROUP BY bucket_id
> ),
> final_stats AS
> (SELECT bucket_id, wait_class, value
> FROM db_stats
> UNION ALL
> SELECT bucket_id, wait_class, value
> FROM wait_for_cpu
> ),
> base_data AS
> (SELECT bucket_id, wait_class, value
> FROM final_stats
> ORDER BY 1,2)
> select xmlelement("stattype",
> xmlattributes('wait_time' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("wait_class",
> xmlattributes(wait_class as "name",
> round(value, 2) as "value")))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> WAIT_TIME_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := WAIT_TIME_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := WAIT_TIME_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('wait_time', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := WAIT_TIME_AWR;
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := WAIT_TIME_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('wait_time', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT),
> TO_CHAR(L_END_TIME_UTC, DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_WAIT_TIME_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SYSMETRICS_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> SYSMETRIC_RT CONSTANT VARCHAR2(32767) := q'[
> WITH
> inst_data AS
> (SELECT inst_id, bucket_id, metric_name, value
> FROM TABLE(GV$(CURSOR(
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id, metric_name,
> SUM(value*bucket_ratio) as value
> FROM (
> SELECT USERENV('INSTANCE') as inst_id,
> buckets.bucket_id,
> met.metric_name,
> met.value,
> (LEAST(met.end_time_utc,
> buckets.end_time_utc) -
> GREATEST(met.begin_time_utc,
> buckets.begin_time_utc)) /
> (met.end_time_utc - met.begin_time_utc)
> as bucket_ratio
> FROM (
> SELECT /*+ no_merge */ USERENV('INSTANCE')
> as inst_id,
> m.begin_time-tz.time_zone
> as begin_time_utc,
> m.end_time-tz.time_zone
> as end_time_utc,
> m.metric_name,
> CASE
> WHEN m.metric_name =
> 'CPU Usage Per Sec'
> THEN m.value/100
> ELSE m.value
> END as value
> FROM sys.v_$con_sysmetric_history m,
> (SELECT ROUND(
> (cast(latest_sample_time
> as date) -
> cast(sys_extract_utc(
> systimestamp)
> as date))
> *900,0)/900 as time_zone
> FROM sys.v_$ash_info) tz
> WHERE m.group_id = 18
> AND m.metric_name IN
> ('Average Active Sessions',
> 'CPU Usage Per Sec',
> 'Executions Per Sec',
> 'User Calls Per Sec',
> 'Total Parse Count Per Sec',
> 'User Commits Per Sec',
> 'User Rollbacks Per Sec',
> 'Session Count',
> 'Current Logons Count',
> 'Logons Per Sec',
> 'Logons Per Txn',
> 'Redo Generated Per Sec',
> 'Redo Generated Per Txn',
> 'User Transaction Per Sec',
> 'Network Traffic Volume Per Sec',
> 'Hard Parse Count Per Sec',
> 'Parse Failure Count Per Sec',
> 'Current Open Cursors Count')
> AND m.begin_time-tz.time_zone <
> to_date(:b_end_time_utc, :date_fmt)
> AND m.end_time-tz.time_zone >=
> to_date(:b_start_time_utc, :date_fmt)
> ) met,
> (
> SELECT /*+ no_merge */ level as bucket_id,
> to_date(:b_start_time_utc,:date_fmt) +
> ((level -1) * :p_bucket_interval
> / 86400) as begin_time_utc,
> to_date(:b_start_time_utc,:date_fmt) +
> (level * :p_bucket_interval / 86400)
> as end_time_utc
> FROM sys.v_$instance
> -- note: DUAL not allowed inside GV$
> CONNECT BY level <=
> (to_date(:b_end_time_utc,
> :date_fmt) -
> to_date(:b_start_time_utc,
> :date_fmt))
> * 86400 / :p_bucket_interval
> ) buckets
> WHERE buckets.begin_time_utc < met.end_time_utc
> AND buckets.end_time_utc > met.begin_time_utc
> )
> GROUP BY bucket_id, metric_name)))),
> db_data AS
> (SELECT bucket_id, metric_name,
> SUM(value) as value
> FROM inst_data
> GROUP BY bucket_id, metric_name
> ),
> final_data AS
> (SELECT bucket_id, metric_name,
> value AS value
> FROM db_data
> WHERE value > 0
> ),
> base_data AS
> (SELECT * FROM final_data
> ORDER BY bucket_id, metric_name)
> select xmlelement("stattype",
> xmlattributes('sysmetric' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")
> ))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> SYSMETRIC_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
> SYSMETRIC_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT s.instance_number, s.snap_id,
> s.metric_name,
> CASE
> WHEN s.metric_name =
> 'CPU Usage Per Sec'
> THEN s.average/100
> ELSE s.average
> END as value
> FROM awr_root_con_sysmetric_summ s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.metric_name IN ('Average Active Sessions',
> 'CPU Usage Per Sec',
> 'Executions Per Sec',
> 'User Calls Per Sec',
> 'Total Parse Count Per Sec',
> 'User Commits Per Sec',
> 'User Rollbacks Per Sec',
> 'Session Count',
> 'Current Logons Count',
> 'Logons Per Sec',
> 'Logons Per Txn',
> 'Redo Generated Per Sec',
> 'Redo Generated Per Txn',
> 'User Transaction Per Sec',
> 'Network Traffic Volume Per Sec',
> 'Hard Parse Count Per Sec',
> 'Parse Failure Count Per Sec',
> 'Current Open Cursors Count')
> ),
> agg_stats AS
> (SELECT /*+ no_merge */ instance_number, snap_id, metric_name,
> SUM(value) as value
> FROM base_stats
> WHERE value > 0
> GROUP BY instance_number, snap_id, metric_name
> ),
> snap_stats AS
> (SELECT a.instance_number, a.snap_id, a.metric_name, a.value,
> s.begin_time_utc, s.end_time_utc
> FROM agg_stats a, snaps s
> WHERE a.instance_number = s.instance_number
> AND a.snap_id = s.snap_id
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> db_stats AS
> (SELECT bucket_id, metric_name,
> SUM(value * bucket_ratio) as value
> FROM (
> SELECT b.bucket_id, s.metric_name, s.value,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM snap_stats s, buckets b
> WHERE b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, metric_name
> ),
> base_data AS
> (SELECT bucket_id, metric_name, value
> FROM db_stats
> ORDER BY 1, 2)
> select xmlelement("stattype",
> xmlattributes('sysmetric' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> SYSMETRIC_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := SYSMETRIC_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SYSMETRIC_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('sysmetric', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := SYSMETRIC_AWR;
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SYSMETRIC_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('sysmetric', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT),
> TO_CHAR(L_END_TIME_UTC, DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SYSMETRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_STORAGE_METRICS_XML(
> SERVICE_TYPE IN VARCHAR2 DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> STORAGE_SERVERLESS CONSTANT VARCHAR2(32767) := q'[
> select xmlelement("stattype",
> xmlattributes(
> 'storage' as "name",
> max(c.max_size) as "total",
> max(c.total_size) as "used",
> decode(max(c.max_size), 0, 0,
> (max(c.total_size)/max(c.max_size))*100)
> as "utilization"))
> from sys.v_$containers c
> where c.con_id > 2
> and c.name <> 'PAASSEED']';
>
>
> STORAGE_DEDICATED CONSTANT VARCHAR2(32767) := q'[
> select xmlelement("stattype",
> xmlattributes(
> 'storage' as "name",
> max(c.max_size) as "total",
> max(c.total_size) as "used",
> decode(max(c.max_size), 0, 0,
> (max(c.total_size)/max(c.max_size))*100)
> as "utilization"),
> xmlelement("tablespaces",
> xmlagg(
> xmlelement("tbs",
> xmlattributes(
> m.tablespace_name as "name",
> t.contents as "type",
> ROUND((m.tablespace_size)*t.block_size, 3) total_space,
> ROUND((m.used_space)*t.block_size, 3) used_space,
> ROUND(m.used_percent, 2) used_pct)))))
> from cdb_tablespace_usage_metrics m,
> cdb_tablespaces t,
> sys.v_$containers c
> where t.tablespace_name = m.tablespace_name
> and c.con_id > 2
> and c.name <> 'PAASSEED'
> and m.con_id = c.con_id
> and t.con_id = m.con_id]';
>
> BEGIN
>
> IF (SERVICE_TYPE IN (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D)) THEN
> L_QRY := STORAGE_DEDICATED;
> ELSIF (SERVICE_TYPE IN (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S)) THEN
> L_QRY := STORAGE_SERVERLESS;
> ELSE
> L_QRY := STORAGE_DEDICATED;
> END IF;
>
>
> IF (SHOW_SQL = 1) THEN
>
>
> L_SQL := L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('storage', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML;
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_STORAGE_METRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SESSION_METRICS_XML(
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
> L_FAILED_LOGONS_XML XMLTYPE := NULL;
>
>
> NUM_CONNECTIONS_RT CONSTANT VARCHAR2(32767) := q'[
> SELECT xmlelement("stattype",
> xmlattributes('session' as "name"),
> xmlelement("num_connections", count(*)))
> FROM sys.gv_$session s
> WHERE UPPER(s.service_name) not in
> (SELECT p.name FROM sys.v_$pdbs p WHERE p.con_id=s.con_id)
> AND UPPER(s.service_name) not in ('SYS$BACKGROUND','SYS$USERS')
> AND s.type='USER'
> AND s.sid not in
> (SELECT ps.sid FROM sys.gv_$px_session ps)]';
>
>
> NUM_FAILED_LOGONS_RT CONSTANT VARCHAR2(32767) := q'[
> SELECT xmlelement("failed_logons", count(*))
> FROM cdb_unified_audit_trail
> WHERE action_name = 'LOGON'
> AND return_code != 0]';
>
> BEGIN
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := NUM_CONNECTIONS_RT || NUM_FAILED_LOGONS_RT;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('session', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE NUM_CONNECTIONS_RT
> INTO L_RESULT_XML;
>
> EXECUTE IMMEDIATE NUM_FAILED_LOGONS_RT
> INTO L_FAILED_LOGONS_XML;
>
> IF (L_FAILED_LOGONS_XML IS NOT NULL) THEN
> L_RESULT_XML := L_RESULT_XML.APPENDCHILDXML(XML_ROOT,
> L_FAILED_LOGONS_XML);
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SESSION_METRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION REPORT_WORKLOAD(
> SERVICE_TYPE IN VARCHAR2 DEFAULT NULL,
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME IN DATE DEFAULT NULL,
> END_TIME IN DATE DEFAULT NULL,
> REPORT_LEVEL IN VARCHAR2 DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT 0)
> RETURN XMLTYPE
> IS
>
> L_ELAPSED NUMBER;
> L_CPU NUMBER;
>
>
> L_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC;
>
>
> L_ORIG_ENV DBMS_REPORT.FORMAT_PARAM_VALUES;
> L_SET_ENV BOOLEAN;
>
>
> L_REPORT_XML XMLTYPE := NULL;
> L_RM_METRICS_XML XMLTYPE := NULL;
> L_SYS_METRICS_XML XMLTYPE := NULL;
> L_SQL_TIME_XML XMLTYPE := NULL;
> L_WAIT_TIME_XML XMLTYPE := NULL;
> L_STORAGE_METRICS_XML XMLTYPE := NULL;
> L_SESSION_METRICS_XML XMLTYPE := NULL;
>
>
> L_SERVICE_TYPE VARCHAR2(32767) := SERVICE_TYPE;
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME DATE := START_TIME;
> L_END_TIME DATE := END_TIME;
> L_REPORT_LEVEL VARCHAR2(32767) := REPORT_LEVEL;
> L_TZ VARCHAR2(10) := NULL;
> L_START_TIME_UTC DATE := NULL;
> L_END_TIME_UTC DATE := NULL;
> L_BEGIN_SNAP_ID NUMBER := NULL;
> L_END_SNAP_ID NUMBER := NULL;
>
>
> L_BUCKET_COUNT NUMBER;
> L_BUCKET_INTERVAL NUMBER;
>
>
> L_AWR_PERIOD PRVT_AWRV_METADATA;
>
> L_SNAP_QRY VARCHAR2(32767) := NULL;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_ERRMSG VARCHAR2(32767);
> L_ERROR_XML XMLTYPE := NULL;
>
>
> L_RSRCMGR_DETAIL NUMBER;
> L_SYSMETRIC_DETAIL NUMBER;
> L_SQL_TIME_DETAIL NUMBER;
> L_WAIT_TIME_DETAIL NUMBER;
> L_STORAGE_DETAIL NUMBER;
> L_SESSION_DETAIL NUMBER;
>
>
>
>
> FUNCTION I_PARSE_REPORT_LEVEL(
> P_REPORT_LEVEL IN VARCHAR2,
> P_RSRCMGR_DETAIL OUT NUMBER,
> P_SYSMETRIC_DETAIL OUT NUMBER,
> P_SQL_TIME_DETAIL OUT NUMBER,
> P_WAIT_TIME_DETAIL OUT NUMBER,
> P_STORAGE_DETAIL OUT NUMBER,
> P_SESSION_DETAIL OUT NUMBER)
> RETURN BOOLEAN
> IS
> L_REPORT_LEVEL VARCHAR2(32767) :=
> REPLACE(LOWER(P_REPORT_LEVEL), ' ', NULL);
> L_POS NUMBER := 1;
> L_SETVAL NUMBER;
> BEGIN
>
> P_RSRCMGR_DETAIL := 1;
> P_SYSMETRIC_DETAIL := 1;
> P_SQL_TIME_DETAIL := 1;
> P_WAIT_TIME_DETAIL := 1;
> P_STORAGE_DETAIL := 1;
> P_SESSION_DETAIL := 1;
>
>
> IF (L_REPORT_LEVEL IS NULL) THEN
> RETURN TRUE;
> END IF;
>
>
> L_POS := 1;
>
>
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 3) = 'all') THEN
>
>
> L_POS := L_POS + 3;
>
> ELSIF (SUBSTR(L_REPORT_LEVEL, L_POS, 4) = 'none') THEN
> P_RSRCMGR_DETAIL := 0;
> P_SYSMETRIC_DETAIL := 0;
> P_SQL_TIME_DETAIL := 0;
> P_WAIT_TIME_DETAIL := 0;
> P_STORAGE_DETAIL := 0;
> P_SESSION_DETAIL := 0;
> L_POS := L_POS + 4;
> END IF;
>
>
> WHILE (L_POS < LENGTH(L_REPORT_LEVEL))
> LOOP
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 1) = '-') THEN
> L_SETVAL := 0;
> L_POS := L_POS + 1;
> ELSE
> L_SETVAL := 1;
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 1) = '+') THEN
> L_POS := L_POS + 1;
> END IF;
> END IF;
>
> CASE
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'rsrcmgr') THEN
> P_RSRCMGR_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 9) = 'sysmetric') THEN
> P_SYSMETRIC_DETAIL := L_SETVAL;
> L_POS := L_POS + 9;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 3) = 'sql') THEN
> P_SQL_TIME_DETAIL := L_SETVAL;
> L_POS := L_POS + 3;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 4) = 'wait') THEN
> P_WAIT_TIME_DETAIL := L_SETVAL;
> L_POS := L_POS + 4;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'storage') THEN
> P_STORAGE_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'session') THEN
> P_SESSION_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
> ELSE
>
> RETURN FALSE;
> END CASE;
> END LOOP;
>
>
> RETURN TRUE;
>
> END I_PARSE_REPORT_LEVEL;
>
> BEGIN
>
>
> L_ORIG_ENV := DBMS_REPORT.FORMAT_PARAM_VALUES();
> L_SET_ENV := DBMS_REPORT.SETUP_REPORT_ENV(L_ORIG_ENV);
>
>
> DBMS_REPORT.GET_TIMING_INFO(0, L_ELAPSED, L_CPU);
>
>
>
>
> IF (SERVICE_TYPE IS NOT NULL) THEN
> L_REF_PARAMS('service_type') := SERVICE_TYPE;
> END IF;
>
> IF (IS_REALTIME IS NOT NULL) THEN
> L_REF_PARAMS('is_realtime') := IS_REALTIME;
> END IF;
>
> IF (DBID IS NOT NULL) THEN
> L_REF_PARAMS('dbid') := DBID;
> END IF;
>
> IF (START_TIME IS NOT NULL) THEN
> L_REF_PARAMS('start_time') :=
> TO_CHAR(START_TIME,DBMS_REPORT.DATE_FMT_MOD);
> END IF;
>
> IF (END_TIME IS NOT NULL) THEN
> L_REF_PARAMS('end_time') :=
> TO_CHAR(END_TIME,DBMS_REPORT.DATE_FMT_MOD);
> END IF;
>
> IF (REPORT_LEVEL IS NOT NULL) THEN
> L_REF_PARAMS('report_level') := REPORT_LEVEL;
> END IF;
>
> IF (SHOW_SQL IS NOT NULL) THEN
> L_REF_PARAMS('show_sql') := SHOW_SQL;
> END IF;
>
>
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> IF (DBID IS NULL) THEN
> L_DBID := SYS_CONTEXT('USERENV','CON_DBID');
> END IF;
>
>
> IF (REPORT_LEVEL IS NULL) THEN
> L_REPORT_LEVEL := 'all';
> END IF;
>
>
> IF (END_TIME IS NULL) THEN
> L_END_TIME := SYSDATE;
> END IF;
>
>
> IF (START_TIME IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME := L_END_TIME - 1/24;
>
> ELSE
> L_START_TIME := L_END_TIME - 1;
> END IF;
> END IF;
>
>
> L_TZ := DBMS_SQLTUNE_UTIL2.GET_TZ_OFFSET();
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(
> TO_CHAR(L_END_TIME, 'yyyy-mm-dd hh24:mi:ss')
> || L_TZ,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE);
>
>
>
> L_START_TIME_UTC := CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(
> TO_CHAR(L_START_TIME, 'yyyy-mm-dd hh24:mi:ss')
> || L_TZ,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE);
>
>
> IF (L_IS_REALTIME = 1) THEN
> CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
> (L_END_TIME - L_START_TIME)*DTOS,
> G_METRIC_SOURCE_HISTORY);
> ELSE
>
> CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
> (L_END_TIME - L_START_TIME)*DTOS,
> NULL);
>
>
> L_SNAP_QRY := q'[
> SELECT MIN(snap_id)-1, MAX(snap_id)
> FROM awr_root_snapshot
> WHERE dbid = :l_dbid
> AND cast((end_interval_time_tz at time zone 'UTC') as DATE)
> > to_date(:l_start_time_utc, :date_fmt)
> AND cast((begin_interval_time_tz at time zone 'UTC') as DATE)
> < to_date(:l_end_time_utc, :date_fmt)]';
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_START_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_SNAP_QRY,
> L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (L_AWR_VIEW_PREFIX = DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT) THEN
> L_DBID := SYS_CONTEXT('USERENV','DBID');
> END IF;
>
> BEGIN
> EXECUTE IMMEDIATE L_SNAP_QRY
> INTO L_BEGIN_SNAP_ID, L_END_SNAP_ID
> USING L_DBID,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT;
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> L_BEGIN_SNAP_ID := NULL;
> L_END_SNAP_ID := NULL;
> END;
>
>
>
> L_AWR_PERIOD := PRVT_AWRV_METADATA(P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME,
> P_DBID => L_DBID);
>
> L_AWR_PERIOD.M_BEGIN_SNAP := L_BEGIN_SNAP_ID;
> L_AWR_PERIOD.M_END_SNAP := L_END_SNAP_ID;
> L_AWR_PERIOD.M_MIN_TIME := L_START_TIME;
> L_AWR_PERIOD.M_MAX_TIME := L_END_TIME;
>
>
> IF (L_AWR_PERIOD.M_BEGIN_SNAP IS NULL OR
> L_AWR_PERIOD.M_BEGIN_SNAP = L_AWR_PERIOD.M_END_SNAP)
> THEN
>
> L_ERRMSG := '[' || L_AWR_PERIOD.M_DBID || ']' ||
> '[' || L_AWR_PERIOD.M_INST_ID_LOW || '.' ||
> L_AWR_PERIOD.M_INST_ID_HIGH || ']' ||
> '[' || L_AWR_PERIOD.M_BEGIN_SNAP || '.' ||
> L_AWR_PERIOD.M_END_SNAP || ']' ||
> '[' || TO_CHAR(L_AWR_PERIOD.M_MIN_TIME,
> DBMS_REPORT.DATE_FMT) || '-' ||
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME,
> DBMS_REPORT.DATE_FMT) || ']';
>
> L_AWR_PERIOD := NULL;
>
>
> L_ERROR_XML := ERROR_XML('report_workload',
> -20800,
> 'Insufficient awr data',
> L_ERRMSG);
> ELSE
>
> L_ERRMSG := NULL;
> L_ERROR_XML := NULL;
>
> END IF;
>
> END IF;
>
>
> IF (NOT I_PARSE_REPORT_LEVEL(L_REPORT_LEVEL, L_RSRCMGR_DETAIL,
> L_SYSMETRIC_DETAIL, L_SQL_TIME_DETAIL,
> L_WAIT_TIME_DETAIL, L_STORAGE_DETAIL,
> L_SESSION_DETAIL)) THEN
> SYS.DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR(SYS_ERR_PARAM, 'report_level');
> END IF;
>
>
> IF (L_RSRCMGR_DETAIL = 1) THEN
> L_RM_METRICS_XML := GET_RMMETRICS_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME,
> L_END_TIME,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_SYSMETRIC_DETAIL = 1) THEN
> L_SYS_METRICS_XML := GET_SYSMETRICS_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
>
>
>
>
> IF (L_SQL_TIME_DETAIL = 1) THEN
> L_SQL_TIME_XML := GET_SQL_N_PARSE_TIME_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_WAIT_TIME_DETAIL = 1) THEN
> L_WAIT_TIME_XML := GET_WAIT_TIME_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_STORAGE_DETAIL = 1) THEN
> L_STORAGE_METRICS_XML := GET_STORAGE_METRICS_XML(L_SERVICE_TYPE,
> SHOW_SQL);
> END IF;
>
>
>
>
> IF (L_SESSION_DETAIL = 1) THEN
> L_SESSION_METRICS_XML := GET_SESSION_METRICS_XML(SHOW_SQL);
> END IF;
>
>
> DBMS_REPORT.GET_TIMING_INFO(1, L_ELAPSED, L_CPU);
>
>
>
> L_REPORT_XML :=
> PRVT_REPORT_TAGS.BUILD_REPORT_TAG(
> DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT(
> 'awrv','topsql', L_REF_PARAMS),
> L_ELAPSED, L_CPU);
>
>
>
> IF (L_RM_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_RM_METRICS_XML);
> END IF;
>
> IF (L_SYS_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_SYS_METRICS_XML);
> END IF;
>
> IF (L_SQL_TIME_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_SQL_TIME_XML);
> END IF;
>
> IF (L_WAIT_TIME_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_WAIT_TIME_XML);
> END IF;
>
> IF (L_STORAGE_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_STORAGE_METRICS_XML);
> END IF;
>
> IF (L_SESSION_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_SESSION_METRICS_XML);
> END IF;
>
> IF (L_ERROR_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_ERROR_XML);
> END IF;
>
> <<DONE>>
>
>
> IF (L_REPORT_XML IS NULL) THEN
>
> L_REPORT_XML :=
> PRVT_REPORT_TAGS.BUILD_REPORT_TAG(
> DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT(
> 'awrv','topsql',L_REF_PARAMS),
> NULL, NULL);
> END IF;
>
> IF (L_SET_ENV) THEN
>
> DBMS_REPORT.RESTORE_REPORT_ENV(L_ORIG_ENV);
> END IF;
>
>
> RETURN L_REPORT_XML;
>
> END REPORT_WORKLOAD;
>
>
288,290c288,294 < IF (M_RESOLVED_DB_TYPE < IN (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, < DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP)) --- > > IF (M_RESOLVED_DB_TYPE IN > (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, > DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP) > AND > DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(P_START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) 432c436,438 < IF (SYS.DBMS_SQLTUNE_UTIL0.CDB_IS_PDB(L_CON_NAME, L_CON_ID)) THEN --- > IF (SYS.DBMS_SQLTUNE_UTIL0.CDB_IS_PDB(L_CON_NAME, L_CON_ID) AND > DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(P_START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) THEN
62a63,65
> P_INCLUDE_SQLS NUMBER := 1;
> P_JET NUMBER := 0;
> L_SERVICE_TYPE VARCHAR2(32);
532,537d534
< P_LAST_REFRESH_TIME := TO_DATE(
< DBMS_REPORT.GET_PARAM(PARAMS,
< 'last_refresh_time',
< NULLABLE=>TRUE),
< DBMS_REPORT.DATE_FMT_MOD);
<
539,540c536
< P_INST_ID := TO_NUMBER(
< DBMS_REPORT.GET_PARAM(PARAMS,'inst_id',NULLABLE=>TRUE));
---
> P_DBID := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'dbid',NULLABLE=>TRUE));
543c539,540
< P_DBID := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'dbid',NULLABLE=>TRUE));
---
> P_INST_ID := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(PARAMS,'inst_id',NULLABLE=>TRUE));
553a551
> L_SERVICE_TYPE := DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE();
556,557c554
< P_TOP_N_DETAIL := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'top_n_detail',
< NULLABLE=>TRUE));
---
> P_JET := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'is_jet', NULLABLE=>TRUE));
560,564d556
< P_OUTER_START_TIME := TO_DATE(
< DBMS_REPORT.GET_PARAM(PARAMS,'outer_start_time',
< NULLABLE=>TRUE),
< DBMS_REPORT.DATE_FMT_MOD);
<
566,569c558,577
< P_OUTER_END_TIME := TO_DATE(
< DBMS_REPORT.GET_PARAM(PARAMS,'outer_end_time',
< NULLABLE=>TRUE),
< DBMS_REPORT.DATE_FMT_MOD);
---
> IF (P_JET = 1 OR
> (L_SERVICE_TYPE IN
> (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)
> AND SYS_CONTEXT('USERENV', 'CON_ID') > 2)) THEN
>
>
> P_REPORT_LEVEL := DBMS_REPORT.GET_PARAM(PARAMS,'report_level',
> NULLABLE=>TRUE);
>
> REPORT_XML := PRVT_AWR_VIEWER.REPORT_WORKLOAD(
> SERVICE_TYPE => L_SERVICE_TYPE,
> IS_REALTIME => P_IS_REALTIME,
> START_TIME => P_START_TIME,
> END_TIME => P_END_TIME,
> DBID => P_DBID,
> REPORT_LEVEL => P_REPORT_LEVEL,
> SHOW_SQL => P_SHOW_SQL);
572,573c580
< P_DIM_NAME := DBMS_REPORT.GET_PARAM(PARAMS,'dim_name',NULLABLE=>TRUE);
< P_DIM_STAT := DBMS_REPORT.GET_PARAM(PARAMS,'dim_stat',NULLABLE=>TRUE);
---
> ELSE
575,587c582,601
< REPORT_XML := PRVT_AWR_VIEWER.REPORT_TOPSQL_XML(
< START_TIME => P_START_TIME,
< END_TIME => P_END_TIME,
< LAST_REFRESH_TIME => P_LAST_REFRESH_TIME,
< INST_ID => P_INST_ID,
< DBID => P_DBID,
< IS_REALTIME => P_IS_REALTIME,
< TOP_N_DETAIL => P_TOP_N_DETAIL,
< OUTER_START_TIME => P_OUTER_START_TIME,
< OUTER_END_TIME => P_OUTER_END_TIME,
< DIM_NAME => P_DIM_NAME,
< DIM_STAT => P_DIM_STAT,
< SHOW_SQL => P_SHOW_SQL);
---
>
> P_INCLUDE_SQLS := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(PARAMS,'include_sqls',
> NULLABLE=>TRUE));
>
> P_LAST_REFRESH_TIME := TO_DATE(
> DBMS_REPORT.GET_PARAM(PARAMS,
> 'last_refresh_time',
> NULLABLE=>TRUE),
> DBMS_REPORT.DATE_FMT_MOD);
>
>
> P_TOP_N_DETAIL := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'top_n_detail',
> NULLABLE=>TRUE));
>
>
> P_OUTER_START_TIME := TO_DATE(
> DBMS_REPORT.GET_PARAM(PARAMS,'outer_start_time',
> NULLABLE=>TRUE),
> DBMS_REPORT.DATE_FMT_MOD);
588a603,627
>
> P_OUTER_END_TIME := TO_DATE(
> DBMS_REPORT.GET_PARAM(PARAMS,'outer_end_time',
> NULLABLE=>TRUE),
> DBMS_REPORT.DATE_FMT_MOD);
>
>
> P_DIM_NAME := DBMS_REPORT.GET_PARAM(PARAMS,'dim_name',NULLABLE=>TRUE);
> P_DIM_STAT := DBMS_REPORT.GET_PARAM(PARAMS,'dim_stat',NULLABLE=>TRUE);
>
> REPORT_XML := PRVT_AWR_VIEWER.REPORT_TOPSQL_XML(
> START_TIME => P_START_TIME,
> END_TIME => P_END_TIME,
> LAST_REFRESH_TIME => P_LAST_REFRESH_TIME,
> INST_ID => P_INST_ID,
> DBID => P_DBID,
> IS_REALTIME => P_IS_REALTIME,
> TOP_N_DETAIL => P_TOP_N_DETAIL,
> OUTER_START_TIME => P_OUTER_START_TIME,
> OUTER_END_TIME => P_OUTER_END_TIME,
> DIM_NAME => P_DIM_NAME,
> DIM_STAT => P_DIM_STAT,
> INCLUDE_SQLS => P_INCLUDE_SQLS,
> SHOW_SQL => P_SHOW_SQL);
> END IF;
19.0.0.0
2570a2571,2576 > > > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PATCH%' THEN > RETURN 'Y'; > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PARAMETER%' THEN > RETURN 'Y';
495,498c495,503 < FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; --- > IF ( IPTN1 IS NULL ) THEN > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE); > ELSE > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; > END IF; 506,509c511,519 < FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; --- > IF ( IPTN2 IS NULL ) THEN > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE); > ELSE > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; > END IF; 517,520c527,535 < FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; --- > IF ( IPTN1 IS NULL ) THEN > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE); > ELSE > FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) '; > END IF; 528,531c543,551 < FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE) || < ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; --- > IF ( IPTN2 IS NULL ) THEN > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE); > ELSE > FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE) || > ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME( > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) '; > END IF;
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.09.01.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.09.02.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.09.01.00', '.');
< msn CONSTANT NUMBER := instr('18.09.01.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.09.01.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.09.02.00', '.');
> msn CONSTANT NUMBER := instr('18.09.02.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.09.02.00', '.', msn + 1);
29c29
< to_number(substr('18.09.01.00', 1, fsn - 1));
---
> to_number(substr('18.09.02.00', 1, fsn - 1));
31c31
< to_number(substr('18.09.01.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.09.02.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.09.01.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.09.02.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.09.01.00', psn + 1));
---
> to_number(substr('18.09.02.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.10.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.10.01.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.10.00.00', '.');
< msn CONSTANT NUMBER := instr('18.10.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.10.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.10.01.00', '.');
> msn CONSTANT NUMBER := instr('18.10.01.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.10.01.00', '.', msn + 1);
29c29
< to_number(substr('18.10.00.00', 1, fsn - 1));
---
> to_number(substr('18.10.01.00', 1, fsn - 1));
31c31
< to_number(substr('18.10.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.10.01.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.10.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.10.01.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.10.00.00', psn + 1));
---
> to_number(substr('18.10.01.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.10.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.11.00.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.10.00.00', '.');
< msn CONSTANT NUMBER := instr('18.10.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.10.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.11.00.00', '.');
> msn CONSTANT NUMBER := instr('18.11.00.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.11.00.00', '.', msn + 1);
29c29
< to_number(substr('18.10.00.00', 1, fsn - 1));
---
> to_number(substr('18.11.00.00', 1, fsn - 1));
31c31
< to_number(substr('18.10.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.11.00.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.10.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.11.00.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.10.00.00', psn + 1));
---
> to_number(substr('18.11.00.00', psn + 1));
13c13 < '18.9.1.0.0'; --- > '18.9.2.0.0';
13c13 < '18.10.0.0.0'; --- > '18.10.1.0.0';
13c13 < '18.10.0.0.0'; --- > '18.11.0.0.0';
667c667,672 < -- --- > -- p_cloud_service_type > -- (OUT) - 0 NONE > -- 1 DWCS (Autonomous Data Warehouse) > -- 2 EECS (Exadata Express Cloud Service) > -- 3 PAAS (Platform As A Service (MDBCS)) > -- 4 OLTP (ATP) 678c683,684 < p_packs OUT NUMBER --- > p_packs OUT NUMBER, > p_cloud_service_type OUT NUMBER
15a16,23 > -- Cloud Service Type Constants > CLOUD_SERVICE_TYPE_NONE CONSTANT VARCHAR2(30) := 'NONE'; > CLOUD_SERVICE_TYPE_ADW_D CONSTANT VARCHAR2(30) := 'ADW-D'; > CLOUD_SERVICE_TYPE_ADW_S CONSTANT VARCHAR2(30) := 'ADW-S'; > CLOUD_SERVICE_TYPE_ATP_D CONSTANT VARCHAR2(30) := 'ATP-D'; > CLOUD_SERVICE_TYPE_ATP_S CONSTANT VARCHAR2(30) := 'ATP-S'; > CLOUD_SERVICE_TYPE_OTHER CONSTANT VARCHAR2(30) := 'OTHER'; > 313a322,381 > > -------------------------- get_cloud_service_type -------------------------- > -- NAME: > -- get_cloud_service_type > -- > -- DESCRIPTION: > -- return value of _cloud_service_type parameter for cloud service type > -- > -- RETURN: > -- CLOUD_SERVICE_TYPE_NONE => 'NONE'; > -- CLOUD_SERVICE_TYPE_ADW_D => 'ADW-D'; > -- CLOUD_SERVICE_TYPE_ADW_S => 'ADW-S'; > -- CLOUD_SERVICE_TYPE_ATP_D => 'ATP-D'; > -- CLOUD_SERVICE_TYPE_ATP_S => 'ATP-S'; > -- CLOUD_SERVICE_TYPE_OTHER => 'OTHER'; > ----------------------------------------------------------------------------- > FUNCTION get_cloud_service_type > RETURN varchar2; > > -------------------------- get_tz_offset ----------------------------------- > -- NAME: > -- get_tz_offset > -- > -- DESCRIPTION: > -- get timezone offset from systimestamp > -- > -- RETURN: > -- timezone offset in TZ_HOUR:TZ_MINUTE format > ----------------------------------------------------------------------------- > FUNCTION get_tz_offset > RETURN VARCHAR2; > > ----------------------------- chooseAwrForPdb ------------------------- > -- NAME: > -- chooseAwrForPdb > -- > -- DESCRIPTION: > -- This function determines the location/prefix of the AWR view to use > -- for the database considering the following conditions: > -- 1. Check whether local awr_pdb has snapshots. > -- If not, return AWR_VIEW_ROOT > -- 2. If local awr has some snapshots use AWR_VIEW_PDB > -- 3. If by change local awr was stopped/disabled for some time > -- (say for eg., last 3 hrs not local awr snapshots) > -- then use AWR_VIEW_ROOT > -- > -- > -- NOTE: The beginTime and endTime used are in DB Timezone. > -- Unlike the case of ASH, no need to convert to UTC, > -- since end_interval_time in awr_root, awr_pdb are in same TZ > -- > -- PARAMETERS: > -- dbid (IN) - database id > -- > -- RETURN: > -- Returned type can be 'AWR_ROOT' or 'AWR_PDB'. > -- > ----------------------------------------------------------------------------- > FUNCTION chooseAwrForPdb(beginTime IN DATE) > RETURN VARCHAR2;
417a418,419 > > 429a432 > INCLUDE_SQLS IN NUMBER DEFAULT NULL, 882a886,904 > PROCEDURE CREATE_CONSUMER_GROUP_MAP( > P_CON_ID IN NUMBER, > P_AWR_PERIOD IN OUT NOCOPY PRVT_AWRV_METADATA, > P_CGRP_MAP IN OUT NOCOPY PRVT_AWRV_INSTTAB); > > > > > > > > > > > > > > > 911a934,1153 > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_RMMETRICS_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME IN DATE DEFAULT NULL, > END_TIME IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT 0) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_SQL_N_PARSE_TIME_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_WAIT_TIME_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_SYSMETRICS_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > FUNCTION GET_STORAGE_METRICS_XML( > SERVICE_TYPE IN VARCHAR2 DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > FUNCTION GET_SESSION_METRICS_XML( > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION REPORT_WORKLOAD( > SERVICE_TYPE IN VARCHAR2 DEFAULT NULL, > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME IN DATE DEFAULT NULL, > END_TIME IN DATE DEFAULT NULL, > REPORT_LEVEL IN VARCHAR2 DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT 0)
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.09.01.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.09.02.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.11.00.00'; 6266c6266 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6472c6472 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6634c6634 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6721c6721 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 7871,7884d7870 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7924c7910,7922 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 8079c8077,8089 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.01.00';
1055a1056,1060
> EXCEPTION
> WHEN OTHERS THEN
> CONTENT_TYPE := CONTENT_TYPE_XML;
> RETURN XMLTYPE('<mesg type="oraerr">'|| SQLERRM ||
> '</mesg>').GETCLOBVAL();
2011a2017,2021
>
>
>
>
>
2021c2031,2032
< P_PACKS OUT NUMBER
---
> P_PACKS OUT NUMBER,
> P_CLOUD_SERVICE_TYPE OUT NUMBER
2257a2269,2299
>
> IF (V_RESOLVED_DB_TYPE
> IN (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP))
> THEN
> SELECT CASE MAX(VALUE)
> WHEN 'DWCS' THEN 1
> WHEN 'EECS' THEN 2
> WHEN 'PAAS' THEN 3
> WHEN 'OLTP' THEN 4
> ELSE 0
> END
> INTO P_CLOUD_SERVICE_TYPE
> FROM SYS.AWR_PDB_PARAMETER
> WHERE DBID = P_DBID
> AND SNAP_ID = V_END_SNAP
> AND PARAMETER_NAME = '_cloud_service_type';
> ELSE
> SELECT CASE MAX(VALUE)
> WHEN 'DWCS' THEN 1
> WHEN 'EECS' THEN 2
> WHEN 'PAAS' THEN 3
> WHEN 'OLTP' THEN 4
> ELSE 0
> END
> INTO P_CLOUD_SERVICE_TYPE
> FROM SYS.AWR_ROOT_PARAMETER
> WHERE DBID = P_DBID
> AND SNAP_ID = V_END_SNAP
> AND PARAMETER_NAME = '_cloud_service_type';
> END IF;
>
25990a25991,26033 > > > > > > > > > > > > > > > > > > > > > > > > > > > > IF ( (LOCAL_DB = 1) > AND > (DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE() IN > (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)) > AND > (DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) > ) > THEN > TARGET_DBID := CON_DBID; > END IF; > >
593a594,750
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_CLOUD_SERVICE_TYPE
> RETURN VARCHAR2
> IS
> CLOUD_SERVICE_TYPE VARCHAR2(32);
> BEGIN
>
> SELECT
> CASE
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='PAAS' THEN
> CASE
> WHEN UPPER(MAX(PROPERTY_VALUE)) LIKE '%ADW.ORACLECLOUD.COM' THEN
> CLOUD_SERVICE_TYPE_ADW_D
> WHEN UPPER(MAX(PROPERTY_VALUE)) LIKE '%ATP.ORACLECLOUD.COM' THEN
> CLOUD_SERVICE_TYPE_ATP_D
> ELSE CLOUD_SERVICE_TYPE_OTHER
> END
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='DWCS' THEN
> CLOUD_SERVICE_TYPE_ADW_S
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='OLTP' THEN
> CLOUD_SERVICE_TYPE_ATP_S
> ELSE
> UPPER(NVL(SYS_CONTEXT('USERENV','CLOUD_SERVICE'),
> CLOUD_SERVICE_TYPE_NONE))
> END
> INTO CLOUD_SERVICE_TYPE
> FROM DATABASE_PROPERTIES
> WHERE UPPER(PROPERTY_NAME) = 'GLOBAL_DB_NAME';
>
> RETURN CLOUD_SERVICE_TYPE;
>
> END GET_CLOUD_SERVICE_TYPE;
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_TZ_OFFSET
> RETURN VARCHAR2
> IS
> L_TZ VARCHAR2(10);
> BEGIN
>
>
> L_TZ := EXTRACT(TIMEZONE_HOUR FROM SYSTIMESTAMP) || ':' ||
> EXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP);
> RETURN L_TZ;
> END GET_TZ_OFFSET;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION CHOOSEAWRFORPDB(
> BEGINTIME IN DATE)
> RETURN VARCHAR2
> IS
> L_AWR_LOCATION VARCHAR2(32) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> L_SQLTEXT VARCHAR2(4000);
> L_PDB_TIME DATE;
> L_ROOT_TIME DATE;
>
> BEGIN
>
>
> L_SQLTEXT :=
> 'SELECT CAST(MAX(end_interval_time) AS DATE)
> FROM AWR_PDB_SNAPSHOT
> WHERE dbid = :1';
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_PDB_TIME
> USING SYS_CONTEXT('USERENV', 'CON_DBID');
>
> IF L_PDB_TIME IS NULL THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> RETURN L_AWR_LOCATION;
> END IF;
>
> IF L_PDB_TIME >= BEGINTIME THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB;
> RETURN L_AWR_LOCATION;
> END IF;
>
>
>
>
> L_SQLTEXT :=
> 'SELECT CAST(MAX(end_interval_time) AS DATE)
> FROM AWR_ROOT_SNAPSHOT
> WHERE dbid = :1';
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_ROOT_TIME
> USING SYS_CONTEXT('USERENV', 'DBID');
>
> IF ((L_ROOT_TIME IS NOT NULL) AND
> (L_ROOT_TIME >= BEGINTIME)
> )
> THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> RETURN L_AWR_LOCATION;
>
> ELSE
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB;
> RETURN L_AWR_LOCATION;
> END IF;
>
> RETURN L_AWR_LOCATION;
>
> END CHOOSEAWRFORPDB;
>
7a8,13 > AWR_PREFIX_ROOT VARCHAR2(16) := 'sys.awr_root'; > AWR_PREFIX_PDB VARCHAR2(16) := 'sys.awr_pdb'; > G_CLOUD_SERVICE_TYPE CONSTANT VARCHAR2(32) := > DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE(); > > 379c385 < from sys.dba_hist_active_sess_history a --- > from #AWR_VIEW_PREFIX#_active_sess_history a 462c468 < from sys.dba_hist_pdb_instance)) c'); --- > from #AWR_VIEW_PREFIX#_pdb_instance)) c'); 485,502c491,550 < SELECT MIN(SNAP_ID) < INTO L_BEGIN_SNAP < FROM SYS.DBA_HIST_ASH_SNAPSHOT < WHERE DBID = L_DBID < AND INSTANCE_NUMBER = P_INST_ID < AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR P_START_TIME BETWEEN BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); < < < SELECT MAX(SNAP_ID) < INTO L_END_SNAP < FROM SYS.DBA_HIST_ASH_SNAPSHOT < WHERE DBID = L_DBID < AND INSTANCE_NUMBER = P_INST_ID < AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR P_END_TIME BETWEEN BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); --- > > IF ((G_CLOUD_SERVICE_TYPE IN > (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)) > AND > (L_IS_ROOT = FALSE)) > THEN > L_QRY := REPLACE(L_QRY,'#AWR_VIEW_PREFIX#', AWR_PREFIX_PDB); > > > SELECT MIN(SNAP_ID) > INTO L_BEGIN_SNAP > FROM SYS.AWR_PDB_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_START_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > > SELECT MAX(SNAP_ID) > INTO L_END_SNAP > FROM SYS.AWR_PDB_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_END_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > ELSE > > L_QRY := REPLACE(L_QRY,'#AWR_VIEW_PREFIX#', AWR_PREFIX_ROOT); > > > SELECT MIN(SNAP_ID) > INTO L_BEGIN_SNAP > FROM SYS.AWR_ROOT_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_START_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > > SELECT MAX(SNAP_ID) > INTO L_END_SNAP > FROM SYS.AWR_ROOT_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_END_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > END IF;
2530,2578d2529
< PROCEDURE I_CREATE_AWR_CG_MAP(
< P_CON_ID IN NUMBER,
< P_AWR_PERIOD IN OUT NOCOPY PRVT_AWRV_METADATA,
< P_CGRP_MAP IN OUT NOCOPY PRVT_AWRV_INSTTAB)
< IS
<
< SQLSTMT_MAP CONSTANT VARCHAR2(32767) := q'[
< select sys.prvt_awrv_inst(id, name)
< from (
< select distinct
< consumer_group_id id,
< consumer_group_name name
< from sys.awr_root_rsrc_consumer_group s
< where s.dbid = :m_dbid
< and s.snap_id > :m_begin_snap
< and s.snap_id <= :m_end_snap
< and s.con_dbid = :m_con_dbid
< and ]' || P_AWR_PERIOD.GET_INST_CLAUSE('s') ||')';
<
< BEGIN
< IF (P_CON_ID = 0 OR P_CON_ID > 2) THEN
< EXECUTE IMMEDIATE SQLSTMT_MAP
< BULK COLLECT INTO P_CGRP_MAP
< USING P_AWR_PERIOD.M_DBID,
< P_AWR_PERIOD.M_BEGIN_SNAP, P_AWR_PERIOD.M_END_SNAP,
< SYS.DBMS_SQLTUNE_UTIL0.CDBCON_ID_TO_DBID(P_CON_ID),
< P_AWR_PERIOD.M_INST_ID_LOW, P_AWR_PERIOD.M_INST_ID_HIGH,
< P_AWR_PERIOD.M_INST_ID_LIST;
< ELSE
<
< P_CGRP_MAP := PRVT_AWRV_INSTTAB();
< END IF;
< END I_CREATE_AWR_CG_MAP;
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
2883c2834,2835
< I_CREATE_AWR_CG_MAP(L_CON_ID, AWR_PERIOD, L_DIM_MAP);
---
> PRVT_AWR_VIEWER.CREATE_CONSUMER_GROUP_MAP(
> L_CON_ID, AWR_PERIOD, L_DIM_MAP);
1183a1184,1273
>
>
> RMMETRICS_COMMON CONSTANT VARCHAR2(32767) := q'[
> with rmmetrics_data as (-- autonomous DB workload main query
> select bucket_id,
> new_id consumer_group_id,
> case
> when rn = 1 and :is_awr = 1
> then (select /*+ cardinality(t 1) */ instance_name
> from table(cast(:p_contTab
> as sys.prvt_awrv_instTab)) t
> where t.inst_id = consumer_group_id)
> when rn = 1
> then consumer_group_name
> else null
> end consumer_group_name,
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts
> from ( -- generate an id since default ids can be high numbers
> select bucket_id,
> consumer_group_id,
> consumer_group_name,
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts,
> row_number() over (partition by consumer_group_id,
> consumer_group_name
> order by bucket_id,
> consumer_group_id,
> consumer_group_name) rn,
> -- generate an id
> dense_rank() over (order by consumer_group_id,
> consumer_group_name) new_id
> from (#GENERATE_METRICS_BUCKETID#) rsrc
> where avg_cpu_utilization + cpu_usage_per_sec +
> avg_running_stmts +
> avg_active_parallel_stmts + avg_queued_parallel_stmts > 0)
> )
>
> -- construct xml
> select xmlagg(
> nvl2(buckets,
> xmlelement("stattype",
> xmlattributes('rsrcmgrmetric' as "name"),
> xmlelement("stat_info",
> nvl(stat_id,
> xmlelement("stat",
> xmlattributes(
> consumer_group_id as "id",
> consumer_group_id as "name")))),
> #GENERATE_BUCKETS_TAG#),
> null))
> from ( -- aggregate buckets
> select #GENERATE_BUCKETID_TAG#,
> xmlagg(stat_id) stat_id,
> max(consumer_group_id) consumer_group_id
> from ( -- aggregate stats in each bucket
> select bucket_id,
> max(consumer_group_id) consumer_group_id,
> xmlagg(stat_id order by consumer_group_id) stat_id,
> xmlagg(xmlelement("stat",
> xmlattributes(consumer_group_id as "id",
> round(avg_cpu_utilization, 2) as "cpu",
> round(cpu_usage_per_sec, 2) as "cpuUsage",
> round(avg_running_stmts, 2) as "rst",
> round(avg_active_parallel_stmts, 2) as "apst",
> round(avg_queued_parallel_stmts, 2) as "qpst"
> )
> )
> order by consumer_group_id) stats
> from ( -- generate id name map
> select bucket_id, consumer_group_id,
> nvl2(consumer_group_name,
> xmlelement("stat",
> xmlattributes(consumer_group_id as "id",
> consumer_group_name as "name")),
> null) stat_id,
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts
> from rmmetrics_data)
> group by bucket_id))]';
>
1311a1402,1461
> PROCEDURE CREATE_CONSUMER_GROUP_MAP(
> P_CON_ID IN NUMBER,
> P_AWR_PERIOD IN OUT NOCOPY PRVT_AWRV_METADATA,
> P_CGRP_MAP IN OUT NOCOPY PRVT_AWRV_INSTTAB)
> IS
>
> L_QRY VARCHAR2(32767) := NULL;
>
>
> SQLSTMT_MAP CONSTANT VARCHAR2(32767) := q'[
> select sys.prvt_awrv_inst(id, name)
> from (
> select distinct
> consumer_group_id id,
> consumer_group_name name
> from sys.awr_root_rsrc_consumer_group s
> where s.dbid = :m_dbid
> and s.snap_id > :m_begin_snap
> and s.snap_id <= :m_end_snap
> and s.con_dbid = :m_con_dbid
> and ]' || P_AWR_PERIOD.GET_INST_CLAUSE('s') ||')';
>
> BEGIN
>
> L_QRY := SQLSTMT_MAP;
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(
> L_QRY, P_AWR_PERIOD.M_AWR_VIEW_PREFIX);
>
>
> IF (P_CON_ID = 0 OR P_CON_ID > 2) THEN
> EXECUTE IMMEDIATE L_QRY
> BULK COLLECT INTO P_CGRP_MAP
> USING P_AWR_PERIOD.M_DBID,
> P_AWR_PERIOD.M_BEGIN_SNAP, P_AWR_PERIOD.M_END_SNAP,
> SYS.DBMS_SQLTUNE_UTIL0.CDBCON_ID_TO_DBID(P_CON_ID),
> P_AWR_PERIOD.M_INST_ID_LOW, P_AWR_PERIOD.M_INST_ID_HIGH,
> P_AWR_PERIOD.M_INST_ID_LIST;
>
> ELSE
>
> P_CGRP_MAP := PRVT_AWRV_INSTTAB();
> END IF;
>
> END CREATE_CONSUMER_GROUP_MAP;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
16404a16555,16556
>
>
16416a16569
> INCLUDE_SQLS IN NUMBER DEFAULT NULL,
16601c16754
< IF (L_DIM_STAT IS NULL AND L_DIM_NAME IS NULL) THEN
---
> IF (INCLUDE_SQLS = 0) THEN
16602a16756,16758
> L_TOPSQL_XML := NULL;
>
> ELSE
16604,16626c16760
< IF (IS_REALTIME IS NULL OR IS_REALTIME = G_TIMEPICKER_HISTORICAL) THEN
<
< IF (L_START_TIME IS NOT NULL AND L_END_TIME IS NOT NULL AND
< (L_END_TIME - L_START_TIME)*24*60 < L_SNAPINT_MINS)
< THEN
< L_USEASH := TRUE;
< END IF;
<
<
< ELSE
< L_USEASH := TRUE;
< END IF;
<
<
< IF (L_USEASH) THEN
< SELECT XMLELEMENT("region_data",
< XMLAGG(
< XMLELEMENT("stattype",
< XMLATTRIBUTES('topsql' AS "name",
< '10' AS "topn",
< 'ash' AS "source"))))
< INTO L_TOPSQL_XML
< FROM SYS.DUAL;
---
> IF (L_DIM_STAT IS NULL AND L_DIM_NAME IS NULL) THEN
16629,16630c16763,16773
< IF (L_END_TIME IS NULL) THEN
< L_END_TIME := SYSDATE;
---
> IF (IS_REALTIME IS NULL OR IS_REALTIME = G_TIMEPICKER_HISTORICAL) THEN
>
> IF (L_START_TIME IS NOT NULL AND L_END_TIME IS NOT NULL AND
> (L_END_TIME - L_START_TIME)*24*60 < L_SNAPINT_MINS)
> THEN
> L_USEASH := TRUE;
> END IF;
>
>
> ELSE
> L_USEASH := TRUE;
16633,16635d16775
< IF (L_START_TIME IS NULL) THEN
< L_START_TIME := L_END_TIME - 1/24;
< END IF;
16637,16646c16777,16805
< L_TOPSQL_XML := L_TOPSQL_XML.APPENDCHILDXML('/*/stattype',
< SYS.DBMS_ASH_INTERNAL.REPORT_ASHVIEWER_XML(
< DBID => L_DBID,
< INST_ID => L_INST_ID,
< BEGIN_TIME =>
< TO_CHAR(L_START_TIME,'hh24:mi:ss mm/dd/yyyy'),
< END_TIME =>
< TO_CHAR(L_END_TIME,'hh24:mi:ss mm/dd/yyyy'),
< REPORT_LEVEL=>'<sqlid,wait_class>{treemap}',
< PARENT_REPORT => 'topsql'));
---
> IF (L_USEASH) THEN
> SELECT XMLELEMENT("region_data",
> XMLAGG(
> XMLELEMENT("stattype",
> XMLATTRIBUTES('topsql' AS "name",
> '10' AS "topn",
> 'ash' AS "source"))))
> INTO L_TOPSQL_XML
> FROM SYS.DUAL;
>
>
> IF (L_END_TIME IS NULL) THEN
> L_END_TIME := SYSDATE;
> END IF;
>
> IF (L_START_TIME IS NULL) THEN
> L_START_TIME := L_END_TIME - 1/24;
> END IF;
>
> L_TOPSQL_XML := L_TOPSQL_XML.APPENDCHILDXML('/*/stattype',
> SYS.DBMS_ASH_INTERNAL.REPORT_ASHVIEWER_XML(
> DBID => L_DBID,
> INST_ID => L_INST_ID,
> BEGIN_TIME =>
> TO_CHAR(L_START_TIME,'hh24:mi:ss mm/dd/yyyy'),
> END_TIME =>
> TO_CHAR(L_END_TIME,'hh24:mi:ss mm/dd/yyyy'),
> REPORT_LEVEL =>'<sqlid,wait_class>{treemap}',
> PARENT_REPORT => 'topsql'));
16648c16807
< ELSE
---
> ELSE
16650,16673c16809,16834
<
< L_TOPSQL_XML := I_REP_AWRDATA_XML(
< START_TIME => L_START_TIME,
< END_TIME => L_END_TIME,
< TIMEPICKER_START => NULL,
< TIMEPICKER_END => NULL,
< INSTANCE_LIST => L_INSTANCE_LIST,
< DBID => L_DBID,
< BUCKET_MAX_COUNT => 1,
< TIME_MODEL => 'no',
< WAIT_CLASS => 'no',
< WAIT_EVENT => 'no',
< EVENT_CLASS => 'no',
< SYSSTAT => 'no',
< SQLSTAT => 'EM_TOP_SQL',
< OSSTAT => 'no',
< IOSTAT => 'no',
< MEMORY => 'no',
< SPACE => 'no',
< KEY_STATISTICS => 'no',
< INST_DETAIL => L_SHOW_INST_DETAIL,
< MEMBERS => 'no',
< SUMMARY => 'no',
< SHOW_SQL => SHOW_SQL);
---
>
> L_TOPSQL_XML := I_REP_AWRDATA_XML(
> START_TIME => L_START_TIME,
> END_TIME => L_END_TIME,
> TIMEPICKER_START => NULL,
> TIMEPICKER_END => NULL,
> INSTANCE_LIST => L_INSTANCE_LIST,
> DBID => L_DBID,
> BUCKET_MAX_COUNT => 1,
> TIME_MODEL => 'no',
> WAIT_CLASS => 'no',
> WAIT_EVENT => 'no',
> EVENT_CLASS => 'no',
> SYSSTAT => 'no',
> SQLSTAT => 'EM_TOP_SQL',
> OSSTAT => 'no',
> IOSTAT => 'no',
> MEMORY => 'no',
> SPACE => 'no',
> KEY_STATISTICS => 'no',
> INST_DETAIL => L_SHOW_INST_DETAIL,
> MEMBERS => 'no',
> SUMMARY => 'no',
> SHOW_SQL => SHOW_SQL);
> END IF;
> END IF;
16675d16835
< END IF;
18086a18247,20960
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_RMMETRICS_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME IN DATE DEFAULT NULL,
> END_TIME IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT 0)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME DATE := START_TIME;
> L_END_TIME DATE := END_TIME;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(10) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_BUCKET_MAP PRVT_AWRV_MAPTAB;
>
>
> L_CON_ID NUMBER;
> L_CON_DBID NUMBER;
>
>
> L_RESOURCE_MANAGER_ENABLED NUMBER := 0;
>
>
> L_NUM_CPUS NUMBER := NULL;
>
>
> L_CG_MAP PRVT_AWRV_INSTTAB := NULL;
>
>
> RMMETRICS_RT CONSTANT VARCHAR2(32767) := q'[
> select bucket_id,
> consumer_group_id, consumer_group_name,
> case
> when avg(avg_cpu_utilization) > 100 then 100
> else avg(avg_cpu_utilization)
> end avg_cpu_utilization,
> avg(cpu_usage_per_sec) cpu_usage_per_sec,
> sum(avg_running_stmts) avg_running_stmts,
> sum(avg_active_parallel_stmts)
> avg_active_parallel_stmts,
> sum(avg_queued_parallel_stmts)
> avg_queued_parallel_stmts
> from table(sys.gv$(cursor(
> select trunc(
> ((extract(day from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> * 86400 +
> extract(hour from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> * 3600 +
> extract(minute from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> * 60 +
> extract(second from
> (cast(trunc(end_time,'mi') as timestamp) -
> cast(trunc(to_date(:b_start_time, :date_fmt),'mi')
> as timestamp)))
> )
> / :p_bucket_interval)) + 1 bucket_id,
> consumer_group_name,
> consumer_group_id,
> (case
> -- resource manager enabled, use running_sessions_limit
> when :resource_manager_enabled > 0 then
> (case
> -- if running_sessions_limit is not set
> when running_sessions_limit is null or
> running_sessions_limit = 0 then
> avg_cpu_utilization
> else
> (avg_running_sessions/running_sessions_limit)*100
> end)
> -- resource manager disabled, use system cpu limit
> else
> (case
> when :num_cpus > 0 then
> (avg_running_sessions/:num_cpus)*100
> -- system cpu limit not available
> -- use running_sessions_limit
> else
> (case
> when running_sessions_limit is null or
> running_sessions_limit = 0 then
> avg_cpu_utilization
> else
> (avg_running_sessions/running_sessions_limit)*100
> end)
> end)
> end) avg_cpu_utilization,
> cpu_consumed_time/(intsize_csec*10) cpu_usage_per_sec,
> avg_running_sessions + avg_waiting_sessions
> as avg_running_stmts,
> avg_active_parallel_stmts,
> avg_queued_parallel_stmts
> from sys.v_$rsrcmgrmetric_history
> where end_time >= to_date(:b_start_time, :date_fmt)
> and end_time < to_date(:b_end_time, :date_fmt))))
> group by bucket_id, consumer_group_id, consumer_group_name]';
>
>
> RMMETRICS_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var is_awr number;
> var p_contTab prvt_awrv_instTab;
> var b_start_time varchar2(4000);
> var b_end_time varchar2(4000);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_min_time varchar2(4000);
> var b_max_time varchar2(4000);
> var b_duration number;
> var date_fmt varchar2(4000);
> var resource_manager_enabled number;
> var num_cpus number;
> begin
> :is_awr := #is_awr#;
> :p_contTab := #p_contTab#;
> :b_start_time := '#b_start_time#';
> :b_end_time := '#b_end_time#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_min_time := '#b_min_time#';
> :b_max_time := '#b_max_time#';
> :b_duration := #b_duration#;
> :date_fmt := '#date_fmt#';
> :resource_manager_enabled := #resource_manager_enabled#;
> :num_cpus := #num_cpus#;
> end;
> /]';
>
>
> RMMETRICS_AWR CONSTANT VARCHAR2(32767) := q'[
> select bucket_id,
> consumer_group_id,
> consumer_group_name,
> case
> when sum(avg_cpu_utilization) > 100 then 100
> else sum(avg_cpu_utilization)
> end avg_cpu_utilization,
> sum(cpu_usage_per_sec) cpu_usage_per_sec,
> sum(avg_running_stmts) avg_running_stmts,
> sum(avg_active_parallel_stmts) avg_active_parallel_stmts,
> sum(avg_queued_parallel_stmts) avg_queued_parallel_stmts
> from (
> select bucket_id,
> consumer_group_name,
> consumer_group_id,
> -- avg
> avg(avg_cpu_utilization) avg_cpu_utilization,
> avg(cpu_usage_per_sec) cpu_usage_per_sec,
> avg(avg_running_stmts) avg_running_stmts,
> avg(avg_active_parallel_stmts)
> avg_active_parallel_stmts,
> avg(avg_queued_parallel_stmts)
> avg_queued_parallel_stmts
> from table(cast(:bucket_map as sys.prvt_awrv_mapTab)) b,
> (select /*+ no_merge */ nvl(m.snap_id, c.snap_id) as snap_id,
> nvl(m.instance_number, c.instance_number)
> as instance_number,
> m.consumer_group_id consumer_group_id,
> null consumer_group_name,
> case
> when c.cpu_limit is null or
> c.cpu_limit = 0 then
> m.avg_cpu_utilization
> else
> (m.avg_running_sessions/c.cpu_limit)*100
> end as avg_cpu_utilization,
> m.cpu_consumed_time/(m.intsize_csec*10) cpu_usage_per_sec,
> m.avg_running_sessions + m.avg_waiting_sessions
> as avg_running_stmts,
> m.avg_active_parallel_stmts as avg_active_parallel_stmts,
> m.avg_queued_parallel_stmts as avg_queued_parallel_stmts
> from awr_root_rsrc_metric m,
> (SELECT /*+ no_merge */
> nvl(s.snap_id, p.snap_id) as snap_id,
> nvl(s.instance_number, p.instance_number)
> as instance_number,
> CASE WHEN p.cpu_count IS NULL
> THEN nvl(s.num_cpus, s.num_cpu_cores)
> ELSE LEAST(p.cpu_count,
> NVL(s.num_cpus, s.num_cpu_cores))
> END as cpu_limit
> FROM
> (SELECT /*+ NO_MERGE */ snap_id, instance_number,
> MAX(num_cpus) num_cpus,
> MAX(num_cpu_cores) num_cpu_cores
> FROM
> (SELECT snap_id, instance_number,
> CASE
> WHEN stat_name = 'NUM_CPUS'
> THEN value
> ELSE NULL
> END as num_cpus,
> CASE
> WHEN stat_name = 'NUM_CPU_CORES'
> THEN value
> ELSE NULL
> END as num_cpu_cores
> FROM awr_root_osstat
> WHERE stat_name IN
> ('NUM_CPUS','NUM_CPU_CORES'))
> GROUP BY snap_id, instance_number) s,
> (SELECT /*+ NO_MERGE */ snap_id, instance_number,
> MAX(
> CASE
> WHEN resource_plan IS NULL THEN NULL
> ELSE TO_NUMBER(cpu_count)
> END) as cpu_count
> FROM
> (SELECT snap_id, instance_number,
> CASE
> WHEN parameter_name = 'cpu_count'
> THEN value
> ELSE NULL
> END cpu_count,
> CASE
> WHEN parameter_name =
> 'resource_manager_plan'
> THEN value
> ELSE NULL
> END resource_plan
> FROM awr_root_parameter
> WHERE parameter_name IN
> ('cpu_count', 'resource_manager_plan'))
> GROUP BY snap_id, instance_number) p
> WHERE s.snap_id = p.snap_id
> AND s.instance_number = p.instance_number) c
> where m.dbid = :m_dbid
> and m.snap_id between :m_begin_snap and :m_end_snap
> and m.con_dbid = :l_con_dbid
> and m.snap_id = c.snap_id(+)
> and m.instance_number = c.instance_number(+)) y
> where b.snap_id = y.snap_id
> and b.instance_number = y.instance_number
> group by bucket_id,
> y.instance_number,
> y.consumer_group_id,
> y.consumer_group_name)
> group by bucket_id,
> consumer_group_id,
> consumer_group_name]';
>
>
> RMMETRICS_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var is_awr number;
> var p_contTab prvt_awrv_instTab;
> var bucket_map prvt_awrv_mapTab;
> var m_dbid number;
> var m_begin_snap number;
> var m_end_snap number;
> var l_con_dbid number;
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_min_time varchar2(4000);
> var b_max_time varchar2(4000);
> var b_duration number;
> begin
> :is_awr := #is_awr#;
> :p_contTab := #p_contTab#;
> :bucket_map := #bucket_map#;
> :m_dbid := #m_dbid#;
> :m_begin_snap := #m_begin_snap#;
> :m_end_snap := #m_end_snap#;
> :l_con_dbid := #l_con_dbid#;
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_min_time := '#b_min_time#';
> :b_max_time := '#b_max_time#';
> :b_duration := #b_duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME IS NULL) THEN
> L_END_TIME := SYSDATE;
> END IF;
>
>
> IF (START_TIME IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME := L_END_TIME - 1/24;
>
> ELSE
> L_START_TIME := L_END_TIME - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
>
> BEGIN
> SELECT COUNT(VALUE)
> INTO L_RESOURCE_MANAGER_ENABLED
> FROM SYS.V_$SYSTEM_PARAMETER2
> WHERE NAME = 'resource_manager_plan'
> AND (VALUE IS NOT NULL AND VALUE != '');
> EXCEPTION
> WHEN OTHERS THEN
> L_RESOURCE_MANAGER_ENABLED := 0;
> END;
>
>
> BEGIN
> SELECT SUM(NUM_CPUS)
> INTO L_NUM_CPUS
> FROM (
> SELECT HOST_NAME, SUM(NUM_CPUS) AS NUM_CPUS
> FROM TABLE(GV$(CURSOR(
> SELECT I.INSTANCE_NUMBER AS INST_ID, I.HOST_NAME,
> NVL(OS.NUM_CPUS, OS.NUM_CPU_CORES) AS NUM_CPUS
> FROM SYS.V$INSTANCE I,
> (SELECT MAX(DECODE(STAT_NAME, 'NUM_CPUS',
> VALUE, NULL)) AS NUM_CPUS,
> MAX(DECODE(STAT_NAME, 'NUM_CPU_CORES',
> VALUE, NULL)) AS NUM_CPU_CORES
> FROM SYS.V$OSSTAT
> WHERE STAT_NAME IN ('NUM_CPUS', 'NUM_CPU_CORES')
> ) OS)))
> GROUP BY HOST_NAME);
> EXCEPTION
> WHEN OTHERS THEN
> L_NUM_CPUS := 0;
> END;
>
>
> L_QRY := RMMETRICS_COMMON;
>
>
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETS_TAG#',
> GENERATE_BUCKETS_TAG2);
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETID_TAG#',
> GENERATE_BUCKETID_TAG);
> L_QRY := REPLACE(L_QRY,'#GENERATE_METRICS_BUCKETID#',
> RMMETRICS_RT);
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := RMMETRICS_RT_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#is_awr#', 0);
> L_SQL := REPLACE(L_SQL, '#p_contTab#', 'null');
> L_SQL := REPLACE(L_SQL, '#b_start_time#',
> TO_CHAR(L_START_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time#',
> TO_CHAR(L_END_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_min_time#', TO_CHAR(L_START_TIME,
> DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_max_time#', TO_CHAR(L_END_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND((L_END_TIME - L_START_TIME)*DTOS));
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
>
> L_SQL := REPLACE(L_SQL, '#resource_manager_enabled#',
> L_RESOURCE_MANAGER_ENABLED);
>
> L_SQL := REPLACE(L_SQL, '#num_cpus#', L_NUM_CPUS);
>
> L_RESULT_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_SQL);
>
> ELSE
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING 0, L_CG_MAP,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_RESOURCE_MANAGER_ENABLED,
> L_NUM_CPUS, L_NUM_CPUS,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME, DATE_FMT), DATE_FMT,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME,DATE_FMT), TO_CHAR(L_END_TIME,DATE_FMT),
> (L_END_TIME - L_START_TIME)*DTOS;
> END IF;
>
>
> ELSE
>
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
> CREATE_BUCKET_SNAP_MAP(L_AWR_PERIOD, L_BUCKET_MAP,
> L_BUCKET_COUNT, L_BUCKET_INTERVAL);
>
> L_CON_ID := SYS_CONTEXT('USERENV','CON_ID');
>
> CREATE_CONSUMER_GROUP_MAP(L_CON_ID, L_AWR_PERIOD, L_CG_MAP);
>
>
> L_QRY := RMMETRICS_COMMON;
>
>
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETS_TAG#',
> GENERATE_BUCKETS_TAG2);
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETID_TAG#',
> GENERATE_BUCKETID_TAG);
> L_QRY := REPLACE(L_QRY,'#GENERATE_METRICS_BUCKETID#',
> RMMETRICS_AWR);
>
>
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := RMMETRICS_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#is_awr#', 1);
> L_SQL := REPLACE(L_SQL, '#p_contTab#', '');
> L_SQL := REPLACE(L_SQL, '#bucket_map#', '');
> L_SQL := REPLACE(L_SQL, '#m_dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#m_begin_snap#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#m_end_snap#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#l_con_dbid#', L_CON_DBID);
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_min_time#',
> TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_max_time#',
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_AWR_PERIOD.M_MAX_TIME,
> L_AWR_PERIOD.M_MIN_TIME)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING 1,
> L_CG_MAP,
> L_BUCKET_MAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_CON_DBID,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT),
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT),
> ROUND(
> INTERVAL_TO_SECOND(
> L_AWR_PERIOD.M_MAX_TIME, L_AWR_PERIOD.M_MIN_TIME));
> END IF;
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_RMMETRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SQL_N_PARSE_TIME_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> SQL_AND_PARSE_TIME_RT CONSTANT VARCHAR2(32767) := q'[
> with base_data as (
> SELECT bucket_id,
> SUM(parse_time_sec) / :p_bucket_interval AS parse_aas,
> SUM(sql_exec_time_sec) / :p_bucket_interval AS sql_exec_aas,
> SUM(plsql_exec_time_sec) / :p_bucket_interval AS plsql_exec_aas
> FROM TABLE(GV$(CURSOR(
> SELECT bucket_id,
> SUM(parse_time_usec) / 1000000 as parse_time_sec,
> SUM(sql_exec_time_usec) / 1000000 as sql_exec_time_sec,
> SUM(plsql_exec_time_usec) / 1000000
> as plsql_exec_time_sec
> FROM (
> SELECT TRUNC(((
> cast(sample_time_utc as date) -
> to_date(:b_start_time_utc, :date_fmt))
> * 86400 ) / :p_bucket_interval) + 1
> as bucket_id,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_parse = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as parse_time_usec,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_sql_execution = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as sql_exec_time_usec,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_plsql_execution = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as plsql_exec_time_usec
> FROM sys.v_$active_session_history
> WHERE sample_time_utc > to_timestamp(
> :b_start_time_utc,
> :date_fmt)
> AND sample_time_utc <= to_timestamp(
> :b_end_time_utc,:date_fmt)
> )
> WHERE bucket_id > 0
> GROUP BY bucket_id
> )))
> GROUP BY bucket_id
> ORDER BY bucket_id)
> select xmlelement("stattype",
> xmlattributes('sql' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlforest(round(parse_aas, 2) as "parse_aas",
> round(sql_exec_aas, 2) as "sql_aas",
> round(plsql_exec_aas, 2) as "plsql_aas")))))
> from base_data
> where (parse_aas + sql_exec_aas + plsql_exec_aas) > 0]';
>
>
> SQL_AND_PARSE_TIME_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
>
> SQL_AND_PARSE_TIME_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id, s.stat_name,
> s.value / 1000000 as value_secs
> FROM awr_root_con_sys_time_model s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.stat_name IN ('parse time elapsed',
> 'sql execute elapsed time',
> 'PL/SQL execution elapsed time')
> ),
> diff_stats AS
> (SELECT estat.instance_number, estat.snap_id, estat.stat_name,
> s.begin_time_utc, s.end_time_utc,
> GREATEST(estat.value_secs -
> (s.diff_logic * NVL(bstat.value_secs,0)),0) /
> ((s.end_time_utc - s.begin_time_utc)*86400)
> as value_per_sec
> FROM base_stats estat, snaps s, base_stats bstat
> WHERE estat.instance_number = s.instance_number
> AND estat.snap_id = s.snap_id
> AND estat.instance_number = bstat.instance_number(+)
> AND estat.snap_id-1 = bstat.snap_id(+)
> AND estat.stat_name = bstat.stat_name(+)
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> final_stats AS
> (SELECT bucket_id, stat_name,
> SUM(value_per_sec * bucket_ratio) as aas
> FROM (
> SELECT b.bucket_id, s.stat_name, s.value_per_sec,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM diff_stats s, buckets b
> WHERE s.value_per_sec > 0
> AND b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, stat_name
> ),
> pivoted_stats AS
> (SELECT * FROM final_stats
> PIVOT(SUM(aas) FOR stat_name IN
> ('parse time elapsed' as parse_aas,
> 'sql execute elapsed time' as sql_exec_aas,
> 'PL/SQL execution elapsed time' as plsql_exec_aas)
> )
> ),
> base_data AS
> (SELECT bucket_id, parse_aas, sql_exec_aas, plsql_exec_aas
> FROM pivoted_stats
> ORDER BY bucket_id)
> select xmlelement("stattype",
> xmlattributes('sql' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlforest(round(parse_aas, 2) as "parse_aas",
> round(sql_exec_aas, 2) as "sql_aas",
> round(plsql_exec_aas, 2) as "plsql_aas")))))
> from base_data
> where (parse_aas + sql_exec_aas + plsql_exec_aas) > 0]';
>
>
> SQL_AND_PARSE_TIME_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := SQL_AND_PARSE_TIME_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SQL_AND_PARSE_TIME_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('sql_and_parse_time', L_SQL);
>
> ELSE
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := SQL_AND_PARSE_TIME_AWR;
>
>
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SQL_AND_PARSE_TIME_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#', ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('sql_and_parse_time', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND(
> INTERVAL_TO_SECOND(L_END_TIME_UTC, L_START_TIME_UTC));
>
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SQL_N_PARSE_TIME_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_WAIT_TIME_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> WAIT_TIME_RT CONSTANT VARCHAR2(32767) := q'[
> WITH
> inst_data AS
> (SELECT inst_id, bucket_id, metric_name, value
> FROM TABLE(GV$(CURSOR(
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id, metric_name,
> SUM(value*bucket_ratio) as value
> FROM (
> SELECT USERENV('INSTANCE') as inst_id,
> buckets.bucket_id,
> met.metric_name,
> met.value,
> (LEAST(met.end_time_utc,
> buckets.end_time_utc) -
> GREATEST(met.begin_time_utc,
> buckets.begin_time_utc)) /
> (met.end_time_utc - met.begin_time_utc)
> as bucket_ratio
> FROM (
> SELECT /*+ no_merge */ USERENV('INSTANCE')
> as inst_id,
> m.begin_time-tz.time_zone
> as begin_time_utc,
> m.end_time-tz.time_zone
> as end_time_utc,
> CASE
> WHEN m.metric_name =
> 'Average Active Sessions'
> THEN 'DBTime'
> ELSE 'CPU'
> END as metric_name,
> CASE
> WHEN m.metric_name =
> 'CPU Usage Per Sec'
> THEN m.value*m.intsize_csec/10000
> ELSE m.value*m.intsize_csec/100
> END as value
> FROM sys.v_$con_sysmetric_history m,
> (SELECT ROUND(
> (cast(latest_sample_time
> as date) -
> cast(sys_extract_utc(
> systimestamp)
> as date))
> *900,0)/900 as time_zone
> FROM sys.v_$ash_info) tz
> WHERE m.group_id = 18
> AND m.metric_name IN
> ('Average Active Sessions',
> 'CPU Usage Per Sec')
> AND m.begin_time-tz.time_zone <
> to_date(:b_end_time_utc, :date_fmt)
> AND m.end_time-tz.time_zone >=
> to_date(:b_start_time_utc, :date_fmt)
> ) met,
> (
> SELECT /*+ no_merge */ level as bucket_id,
> to_date(:b_start_time_utc,:date_fmt) +
> ((level -1) * :p_bucket_interval
> / 86400) as begin_time_utc,
> to_date(:b_start_time_utc,:date_fmt) +
> (level * :p_bucket_interval / 86400)
> as end_time_utc
> FROM sys.v_$instance
> -- note: DUAL not allowed inside GV$
> CONNECT BY level <=
> (to_date(:b_end_time_utc,
> :date_fmt) -
> to_date(:b_start_time_utc,
> :date_fmt))
> * 86400 / :p_bucket_interval
> ) buckets
> WHERE buckets.begin_time_utc < met.end_time_utc
> AND buckets.end_time_utc > met.begin_time_utc
> )
> GROUP BY bucket_id, metric_name
> UNION ALL
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id,
> metric_name,
> SUM(value) as value
> FROM (
> SELECT TRUNC(((cast(sample_time_utc as date) -
> to_date(:b_start_time_utc,
> :date_fmt)) * 86400) /
> :p_bucket_interval) + 1 AS bucket_id,
> DECODE(session_state, 'WAITING', wait_class,
> 'ASH_CPU')
> AS metric_name,
> CASE
> WHEN session_type = 'FOREGROUND'
> THEN usecs_per_row/1000000
> ELSE 0
> END AS value
> FROM sys.v_$active_session_history
> WHERE sample_time_utc >=
> to_timestamp(:b_start_time_utc, :date_fmt)
> AND sample_time_utc <
> to_timestamp(:b_end_time_utc, :date_fmt)
> )
> WHERE bucket_id > 0
> GROUP BY bucket_id, metric_name
> )))),
> db_data AS
> (SELECT bucket_id, metric_name,
> SUM(value) as value
> FROM inst_data
> GROUP BY bucket_id, metric_name
> ),
> wait_for_cpu AS
> (SELECT bucket_id, 'wait for CPU' as metric_name,
> GREATEST(SUM(DECODE(metric_name, 'ASH_CPU', value,
> -value)), 0) AS value
> FROM db_data
> WHERE metric_name IN ('CPU', 'ASH_CPU')
> GROUP BY bucket_id
> ),
> final_data AS
> (SELECT bucket_id, metric_name,
> value / :p_bucket_interval AS value
> FROM db_data
> WHERE metric_name <> 'ASH_CPU'
> AND value > 0
> UNION ALL
> SELECT bucket_id, metric_name,
> value /:p_bucket_interval AS value
> FROM wait_for_cpu
> WHERE value > 0
> ),
> base_data AS
> (SELECT * FROM final_data
> ORDER BY bucket_id, metric_name)
> select xmlelement("stattype",
> xmlattributes('wait_time' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")
> ))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> WAIT_TIME_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
> WAIT_TIME_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT e.instance_number, e.snap_id, e.wait_class,
> SUM(e.time_waited_micro_fg)/1000000 as value
> FROM awr_root_con_system_event e
> WHERE e.dbid = :dbid
> AND e.snap_id >= :begin_snap_id
> AND e.snap_id <= :end_snap_id
> AND e.wait_class <> 'Idle'
> GROUP BY e.instance_number, e.snap_id, e.wait_class
> UNION ALL
> SELECT s.instance_number, s.snap_id,
> CASE
> WHEN s.stat_name = 'DB time'
> THEN 'DBTime'
> ELSE 'CPU'
> END as wait_class,
> s.value/1000000 as value
> FROM awr_root_con_sys_time_model s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.stat_name IN ('DB time', 'DB CPU')
> ),
> agg_stats AS
> (SELECT /*+ no_merge */ instance_number, snap_id, wait_class,
> SUM(value) as value
> FROM base_stats
> WHERE value > 0
> GROUP BY instance_number, snap_id, wait_class
> ),
> diff_stats AS
> (SELECT estat.instance_number, estat.snap_id, estat.wait_class,
> s.begin_time_utc, s.end_time_utc,
> GREATEST(estat.value -
> (s.diff_logic * NVL(bstat.value,0)),0) /
> ((s.end_time_utc - s.begin_time_utc)*86400)
> as value
> FROM agg_stats estat, snaps s, agg_stats bstat
> WHERE estat.instance_number = s.instance_number
> AND estat.snap_id = s.snap_id
> AND estat.instance_number = bstat.instance_number(+)
> AND estat.snap_id-1 = bstat.snap_id(+)
> AND estat.wait_class = bstat.wait_class(+)
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> db_stats AS
> (SELECT bucket_id, wait_class,
> SUM(value * bucket_ratio) as value
> FROM (
> SELECT b.bucket_id, s.wait_class, s.value,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM diff_stats s, buckets b
> WHERE b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, wait_class
> ),
> wait_for_cpu AS
> (SELECT bucket_id, 'wait for CPU' as wait_class,
> GREATEST(SUM(DECODE(wait_class, 'DBTime', value, -value)),
> 0) as value
> FROM db_stats
> GROUP BY bucket_id
> ),
> final_stats AS
> (SELECT bucket_id, wait_class, value
> FROM db_stats
> UNION ALL
> SELECT bucket_id, wait_class, value
> FROM wait_for_cpu
> ),
> base_data AS
> (SELECT bucket_id, wait_class, value
> FROM final_stats
> ORDER BY 1,2)
> select xmlelement("stattype",
> xmlattributes('wait_time' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("wait_class",
> xmlattributes(wait_class as "name",
> round(value, 2) as "value")))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> WAIT_TIME_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := WAIT_TIME_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := WAIT_TIME_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('wait_time', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := WAIT_TIME_AWR;
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := WAIT_TIME_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('wait_time', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT),
> TO_CHAR(L_END_TIME_UTC, DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_WAIT_TIME_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SYSMETRICS_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> SYSMETRIC_RT CONSTANT VARCHAR2(32767) := q'[
> WITH
> inst_data AS
> (SELECT inst_id, bucket_id, metric_name, value
> FROM TABLE(GV$(CURSOR(
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id, metric_name,
> SUM(value*bucket_ratio) as value
> FROM (
> SELECT USERENV('INSTANCE') as inst_id,
> buckets.bucket_id,
> met.metric_name,
> met.value,
> (LEAST(met.end_time_utc,
> buckets.end_time_utc) -
> GREATEST(met.begin_time_utc,
> buckets.begin_time_utc)) /
> (met.end_time_utc - met.begin_time_utc)
> as bucket_ratio
> FROM (
> SELECT /*+ no_merge */ USERENV('INSTANCE')
> as inst_id,
> m.begin_time-tz.time_zone
> as begin_time_utc,
> m.end_time-tz.time_zone
> as end_time_utc,
> m.metric_name,
> CASE
> WHEN m.metric_name =
> 'CPU Usage Per Sec'
> THEN m.value/100
> ELSE m.value
> END as value
> FROM sys.v_$con_sysmetric_history m,
> (SELECT ROUND(
> (cast(latest_sample_time
> as date) -
> cast(sys_extract_utc(
> systimestamp)
> as date))
> *900,0)/900 as time_zone
> FROM sys.v_$ash_info) tz
> WHERE m.group_id = 18
> AND m.metric_name IN
> ('Average Active Sessions',
> 'CPU Usage Per Sec',
> 'Executions Per Sec',
> 'User Calls Per Sec',
> 'Total Parse Count Per Sec',
> 'User Commits Per Sec',
> 'User Rollbacks Per Sec',
> 'Session Count',
> 'Current Logons Count',
> 'Logons Per Sec',
> 'Logons Per Txn',
> 'Redo Generated Per Sec',
> 'Redo Generated Per Txn',
> 'User Transaction Per Sec',
> 'Network Traffic Volume Per Sec',
> 'Hard Parse Count Per Sec',
> 'Parse Failure Count Per Sec',
> 'Current Open Cursors Count')
> AND m.begin_time-tz.time_zone <
> to_date(:b_end_time_utc, :date_fmt)
> AND m.end_time-tz.time_zone >=
> to_date(:b_start_time_utc, :date_fmt)
> ) met,
> (
> SELECT /*+ no_merge */ level as bucket_id,
> to_date(:b_start_time_utc,:date_fmt) +
> ((level -1) * :p_bucket_interval
> / 86400) as begin_time_utc,
> to_date(:b_start_time_utc,:date_fmt) +
> (level * :p_bucket_interval / 86400)
> as end_time_utc
> FROM sys.v_$instance
> -- note: DUAL not allowed inside GV$
> CONNECT BY level <=
> (to_date(:b_end_time_utc,
> :date_fmt) -
> to_date(:b_start_time_utc,
> :date_fmt))
> * 86400 / :p_bucket_interval
> ) buckets
> WHERE buckets.begin_time_utc < met.end_time_utc
> AND buckets.end_time_utc > met.begin_time_utc
> )
> GROUP BY bucket_id, metric_name)))),
> db_data AS
> (SELECT bucket_id, metric_name,
> SUM(value) as value
> FROM inst_data
> GROUP BY bucket_id, metric_name
> ),
> final_data AS
> (SELECT bucket_id, metric_name,
> value AS value
> FROM db_data
> WHERE value > 0
> ),
> base_data AS
> (SELECT * FROM final_data
> ORDER BY bucket_id, metric_name)
> select xmlelement("stattype",
> xmlattributes('sysmetric' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")
> ))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> SYSMETRIC_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
> SYSMETRIC_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT s.instance_number, s.snap_id,
> s.metric_name,
> CASE
> WHEN s.metric_name =
> 'CPU Usage Per Sec'
> THEN s.average/100
> ELSE s.average
> END as value
> FROM awr_root_con_sysmetric_summ s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.metric_name IN ('Average Active Sessions',
> 'CPU Usage Per Sec',
> 'Executions Per Sec',
> 'User Calls Per Sec',
> 'Total Parse Count Per Sec',
> 'User Commits Per Sec',
> 'User Rollbacks Per Sec',
> 'Session Count',
> 'Current Logons Count',
> 'Logons Per Sec',
> 'Logons Per Txn',
> 'Redo Generated Per Sec',
> 'Redo Generated Per Txn',
> 'User Transaction Per Sec',
> 'Network Traffic Volume Per Sec',
> 'Hard Parse Count Per Sec',
> 'Parse Failure Count Per Sec',
> 'Current Open Cursors Count')
> ),
> agg_stats AS
> (SELECT /*+ no_merge */ instance_number, snap_id, metric_name,
> SUM(value) as value
> FROM base_stats
> WHERE value > 0
> GROUP BY instance_number, snap_id, metric_name
> ),
> snap_stats AS
> (SELECT a.instance_number, a.snap_id, a.metric_name, a.value,
> s.begin_time_utc, s.end_time_utc
> FROM agg_stats a, snaps s
> WHERE a.instance_number = s.instance_number
> AND a.snap_id = s.snap_id
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> db_stats AS
> (SELECT bucket_id, metric_name,
> SUM(value * bucket_ratio) as value
> FROM (
> SELECT b.bucket_id, s.metric_name, s.value,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM snap_stats s, buckets b
> WHERE b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, metric_name
> ),
> base_data AS
> (SELECT bucket_id, metric_name, value
> FROM db_stats
> ORDER BY 1, 2)
> select xmlelement("stattype",
> xmlattributes('sysmetric' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> SYSMETRIC_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := SYSMETRIC_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SYSMETRIC_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('sysmetric', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := SYSMETRIC_AWR;
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SYSMETRIC_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('sysmetric', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT),
> TO_CHAR(L_END_TIME_UTC, DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SYSMETRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_STORAGE_METRICS_XML(
> SERVICE_TYPE IN VARCHAR2 DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> STORAGE_SERVERLESS CONSTANT VARCHAR2(32767) := q'[
> select xmlelement("stattype",
> xmlattributes(
> 'storage' as "name",
> max(c.max_size) as "total",
> max(c.total_size) as "used",
> decode(max(c.max_size), 0, 0,
> (max(c.total_size)/max(c.max_size))*100)
> as "utilization"))
> from sys.v_$containers c
> where c.con_id > 2
> and c.name <> 'PAASSEED']';
>
>
> STORAGE_DEDICATED CONSTANT VARCHAR2(32767) := q'[
> select xmlelement("stattype",
> xmlattributes(
> 'storage' as "name",
> max(c.max_size) as "total",
> max(c.total_size) as "used",
> decode(max(c.max_size), 0, 0,
> (max(c.total_size)/max(c.max_size))*100)
> as "utilization"),
> xmlelement("tablespaces",
> xmlagg(
> xmlelement("tbs",
> xmlattributes(
> m.tablespace_name as "name",
> t.contents as "type",
> ROUND((m.tablespace_size)*t.block_size, 3) total_space,
> ROUND((m.used_space)*t.block_size, 3) used_space,
> ROUND(m.used_percent, 2) used_pct)))))
> from cdb_tablespace_usage_metrics m,
> cdb_tablespaces t,
> sys.v_$containers c
> where t.tablespace_name = m.tablespace_name
> and c.con_id > 2
> and c.name <> 'PAASSEED'
> and m.con_id = c.con_id
> and t.con_id = m.con_id]';
>
> BEGIN
>
> IF (SERVICE_TYPE IN (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D)) THEN
> L_QRY := STORAGE_DEDICATED;
> ELSIF (SERVICE_TYPE IN (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S)) THEN
> L_QRY := STORAGE_SERVERLESS;
> ELSE
> L_QRY := STORAGE_DEDICATED;
> END IF;
>
>
> IF (SHOW_SQL = 1) THEN
>
>
> L_SQL := L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('storage', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML;
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_STORAGE_METRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SESSION_METRICS_XML(
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
> L_FAILED_LOGONS_XML XMLTYPE := NULL;
>
>
> NUM_CONNECTIONS_RT CONSTANT VARCHAR2(32767) := q'[
> SELECT xmlelement("stattype",
> xmlattributes('session' as "name"),
> xmlelement("num_connections", count(*)))
> FROM sys.gv_$session s
> WHERE UPPER(s.service_name) not in
> (SELECT p.name FROM sys.v_$pdbs p WHERE p.con_id=s.con_id)
> AND UPPER(s.service_name) not in ('SYS$BACKGROUND','SYS$USERS')
> AND s.type='USER'
> AND s.sid not in
> (SELECT ps.sid FROM sys.gv_$px_session ps)]';
>
>
> NUM_FAILED_LOGONS_RT CONSTANT VARCHAR2(32767) := q'[
> SELECT xmlelement("failed_logons", count(*))
> FROM cdb_unified_audit_trail
> WHERE action_name = 'LOGON'
> AND return_code != 0]';
>
> BEGIN
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := NUM_CONNECTIONS_RT || NUM_FAILED_LOGONS_RT;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('session', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE NUM_CONNECTIONS_RT
> INTO L_RESULT_XML;
>
> EXECUTE IMMEDIATE NUM_FAILED_LOGONS_RT
> INTO L_FAILED_LOGONS_XML;
>
> IF (L_FAILED_LOGONS_XML IS NOT NULL) THEN
> L_RESULT_XML := L_RESULT_XML.APPENDCHILDXML(XML_ROOT,
> L_FAILED_LOGONS_XML);
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SESSION_METRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION REPORT_WORKLOAD(
> SERVICE_TYPE IN VARCHAR2 DEFAULT NULL,
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME IN DATE DEFAULT NULL,
> END_TIME IN DATE DEFAULT NULL,
> REPORT_LEVEL IN VARCHAR2 DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT 0)
> RETURN XMLTYPE
> IS
>
> L_ELAPSED NUMBER;
> L_CPU NUMBER;
>
>
> L_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC;
>
>
> L_ORIG_ENV DBMS_REPORT.FORMAT_PARAM_VALUES;
> L_SET_ENV BOOLEAN;
>
>
> L_REPORT_XML XMLTYPE := NULL;
> L_RM_METRICS_XML XMLTYPE := NULL;
> L_SYS_METRICS_XML XMLTYPE := NULL;
> L_SQL_TIME_XML XMLTYPE := NULL;
> L_WAIT_TIME_XML XMLTYPE := NULL;
> L_STORAGE_METRICS_XML XMLTYPE := NULL;
> L_SESSION_METRICS_XML XMLTYPE := NULL;
>
>
> L_SERVICE_TYPE VARCHAR2(32767) := SERVICE_TYPE;
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME DATE := START_TIME;
> L_END_TIME DATE := END_TIME;
> L_REPORT_LEVEL VARCHAR2(32767) := REPORT_LEVEL;
> L_TZ VARCHAR2(10) := NULL;
> L_START_TIME_UTC DATE := NULL;
> L_END_TIME_UTC DATE := NULL;
> L_BEGIN_SNAP_ID NUMBER := NULL;
> L_END_SNAP_ID NUMBER := NULL;
>
>
> L_BUCKET_COUNT NUMBER;
> L_BUCKET_INTERVAL NUMBER;
>
>
> L_AWR_PERIOD PRVT_AWRV_METADATA;
>
> L_SNAP_QRY VARCHAR2(32767) := NULL;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_ERRMSG VARCHAR2(32767);
> L_ERROR_XML XMLTYPE := NULL;
>
>
> L_RSRCMGR_DETAIL NUMBER;
> L_SYSMETRIC_DETAIL NUMBER;
> L_SQL_TIME_DETAIL NUMBER;
> L_WAIT_TIME_DETAIL NUMBER;
> L_STORAGE_DETAIL NUMBER;
> L_SESSION_DETAIL NUMBER;
>
>
>
>
> FUNCTION I_PARSE_REPORT_LEVEL(
> P_REPORT_LEVEL IN VARCHAR2,
> P_RSRCMGR_DETAIL OUT NUMBER,
> P_SYSMETRIC_DETAIL OUT NUMBER,
> P_SQL_TIME_DETAIL OUT NUMBER,
> P_WAIT_TIME_DETAIL OUT NUMBER,
> P_STORAGE_DETAIL OUT NUMBER,
> P_SESSION_DETAIL OUT NUMBER)
> RETURN BOOLEAN
> IS
> L_REPORT_LEVEL VARCHAR2(32767) :=
> REPLACE(LOWER(P_REPORT_LEVEL), ' ', NULL);
> L_POS NUMBER := 1;
> L_SETVAL NUMBER;
> BEGIN
>
> P_RSRCMGR_DETAIL := 1;
> P_SYSMETRIC_DETAIL := 1;
> P_SQL_TIME_DETAIL := 1;
> P_WAIT_TIME_DETAIL := 1;
> P_STORAGE_DETAIL := 1;
> P_SESSION_DETAIL := 1;
>
>
> IF (L_REPORT_LEVEL IS NULL) THEN
> RETURN TRUE;
> END IF;
>
>
> L_POS := 1;
>
>
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 3) = 'all') THEN
>
>
> L_POS := L_POS + 3;
>
> ELSIF (SUBSTR(L_REPORT_LEVEL, L_POS, 4) = 'none') THEN
> P_RSRCMGR_DETAIL := 0;
> P_SYSMETRIC_DETAIL := 0;
> P_SQL_TIME_DETAIL := 0;
> P_WAIT_TIME_DETAIL := 0;
> P_STORAGE_DETAIL := 0;
> P_SESSION_DETAIL := 0;
> L_POS := L_POS + 4;
> END IF;
>
>
> WHILE (L_POS < LENGTH(L_REPORT_LEVEL))
> LOOP
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 1) = '-') THEN
> L_SETVAL := 0;
> L_POS := L_POS + 1;
> ELSE
> L_SETVAL := 1;
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 1) = '+') THEN
> L_POS := L_POS + 1;
> END IF;
> END IF;
>
> CASE
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'rsrcmgr') THEN
> P_RSRCMGR_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 9) = 'sysmetric') THEN
> P_SYSMETRIC_DETAIL := L_SETVAL;
> L_POS := L_POS + 9;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 3) = 'sql') THEN
> P_SQL_TIME_DETAIL := L_SETVAL;
> L_POS := L_POS + 3;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 4) = 'wait') THEN
> P_WAIT_TIME_DETAIL := L_SETVAL;
> L_POS := L_POS + 4;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'storage') THEN
> P_STORAGE_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'session') THEN
> P_SESSION_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
> ELSE
>
> RETURN FALSE;
> END CASE;
> END LOOP;
>
>
> RETURN TRUE;
>
> END I_PARSE_REPORT_LEVEL;
>
> BEGIN
>
>
> L_ORIG_ENV := DBMS_REPORT.FORMAT_PARAM_VALUES();
> L_SET_ENV := DBMS_REPORT.SETUP_REPORT_ENV(L_ORIG_ENV);
>
>
> DBMS_REPORT.GET_TIMING_INFO(0, L_ELAPSED, L_CPU);
>
>
>
>
> IF (SERVICE_TYPE IS NOT NULL) THEN
> L_REF_PARAMS('service_type') := SERVICE_TYPE;
> END IF;
>
> IF (IS_REALTIME IS NOT NULL) THEN
> L_REF_PARAMS('is_realtime') := IS_REALTIME;
> END IF;
>
> IF (DBID IS NOT NULL) THEN
> L_REF_PARAMS('dbid') := DBID;
> END IF;
>
> IF (START_TIME IS NOT NULL) THEN
> L_REF_PARAMS('start_time') :=
> TO_CHAR(START_TIME,DBMS_REPORT.DATE_FMT_MOD);
> END IF;
>
> IF (END_TIME IS NOT NULL) THEN
> L_REF_PARAMS('end_time') :=
> TO_CHAR(END_TIME,DBMS_REPORT.DATE_FMT_MOD);
> END IF;
>
> IF (REPORT_LEVEL IS NOT NULL) THEN
> L_REF_PARAMS('report_level') := REPORT_LEVEL;
> END IF;
>
> IF (SHOW_SQL IS NOT NULL) THEN
> L_REF_PARAMS('show_sql') := SHOW_SQL;
> END IF;
>
>
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> IF (DBID IS NULL) THEN
> L_DBID := SYS_CONTEXT('USERENV','CON_DBID');
> END IF;
>
>
> IF (REPORT_LEVEL IS NULL) THEN
> L_REPORT_LEVEL := 'all';
> END IF;
>
>
> IF (END_TIME IS NULL) THEN
> L_END_TIME := SYSDATE;
> END IF;
>
>
> IF (START_TIME IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME := L_END_TIME - 1/24;
>
> ELSE
> L_START_TIME := L_END_TIME - 1;
> END IF;
> END IF;
>
>
> L_TZ := DBMS_SQLTUNE_UTIL2.GET_TZ_OFFSET();
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(
> TO_CHAR(L_END_TIME, 'yyyy-mm-dd hh24:mi:ss')
> || L_TZ,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE);
>
>
>
> L_START_TIME_UTC := CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(
> TO_CHAR(L_START_TIME, 'yyyy-mm-dd hh24:mi:ss')
> || L_TZ,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE);
>
>
> IF (L_IS_REALTIME = 1) THEN
> CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
> (L_END_TIME - L_START_TIME)*DTOS,
> G_METRIC_SOURCE_HISTORY);
> ELSE
>
> CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
> (L_END_TIME - L_START_TIME)*DTOS,
> NULL);
>
>
> L_SNAP_QRY := q'[
> SELECT MIN(snap_id)-1, MAX(snap_id)
> FROM awr_root_snapshot
> WHERE dbid = :l_dbid
> AND cast((end_interval_time_tz at time zone 'UTC') as DATE)
> > to_date(:l_start_time_utc, :date_fmt)
> AND cast((begin_interval_time_tz at time zone 'UTC') as DATE)
> < to_date(:l_end_time_utc, :date_fmt)]';
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_START_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_SNAP_QRY,
> L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (L_AWR_VIEW_PREFIX = DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT) THEN
> L_DBID := SYS_CONTEXT('USERENV','DBID');
> END IF;
>
> BEGIN
> EXECUTE IMMEDIATE L_SNAP_QRY
> INTO L_BEGIN_SNAP_ID, L_END_SNAP_ID
> USING L_DBID,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT;
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> L_BEGIN_SNAP_ID := NULL;
> L_END_SNAP_ID := NULL;
> END;
>
>
>
> L_AWR_PERIOD := PRVT_AWRV_METADATA(P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME,
> P_DBID => L_DBID);
>
> L_AWR_PERIOD.M_BEGIN_SNAP := L_BEGIN_SNAP_ID;
> L_AWR_PERIOD.M_END_SNAP := L_END_SNAP_ID;
> L_AWR_PERIOD.M_MIN_TIME := L_START_TIME;
> L_AWR_PERIOD.M_MAX_TIME := L_END_TIME;
>
>
> IF (L_AWR_PERIOD.M_BEGIN_SNAP IS NULL OR
> L_AWR_PERIOD.M_BEGIN_SNAP = L_AWR_PERIOD.M_END_SNAP)
> THEN
>
> L_ERRMSG := '[' || L_AWR_PERIOD.M_DBID || ']' ||
> '[' || L_AWR_PERIOD.M_INST_ID_LOW || '.' ||
> L_AWR_PERIOD.M_INST_ID_HIGH || ']' ||
> '[' || L_AWR_PERIOD.M_BEGIN_SNAP || '.' ||
> L_AWR_PERIOD.M_END_SNAP || ']' ||
> '[' || TO_CHAR(L_AWR_PERIOD.M_MIN_TIME,
> DBMS_REPORT.DATE_FMT) || '-' ||
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME,
> DBMS_REPORT.DATE_FMT) || ']';
>
> L_AWR_PERIOD := NULL;
>
>
> L_ERROR_XML := ERROR_XML('report_workload',
> -20800,
> 'Insufficient awr data',
> L_ERRMSG);
> ELSE
>
> L_ERRMSG := NULL;
> L_ERROR_XML := NULL;
>
> END IF;
>
> END IF;
>
>
> IF (NOT I_PARSE_REPORT_LEVEL(L_REPORT_LEVEL, L_RSRCMGR_DETAIL,
> L_SYSMETRIC_DETAIL, L_SQL_TIME_DETAIL,
> L_WAIT_TIME_DETAIL, L_STORAGE_DETAIL,
> L_SESSION_DETAIL)) THEN
> SYS.DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR(SYS_ERR_PARAM, 'report_level');
> END IF;
>
>
> IF (L_RSRCMGR_DETAIL = 1) THEN
> L_RM_METRICS_XML := GET_RMMETRICS_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME,
> L_END_TIME,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_SYSMETRIC_DETAIL = 1) THEN
> L_SYS_METRICS_XML := GET_SYSMETRICS_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
>
>
>
>
> IF (L_SQL_TIME_DETAIL = 1) THEN
> L_SQL_TIME_XML := GET_SQL_N_PARSE_TIME_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_WAIT_TIME_DETAIL = 1) THEN
> L_WAIT_TIME_XML := GET_WAIT_TIME_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_STORAGE_DETAIL = 1) THEN
> L_STORAGE_METRICS_XML := GET_STORAGE_METRICS_XML(L_SERVICE_TYPE,
> SHOW_SQL);
> END IF;
>
>
>
>
> IF (L_SESSION_DETAIL = 1) THEN
> L_SESSION_METRICS_XML := GET_SESSION_METRICS_XML(SHOW_SQL);
> END IF;
>
>
> DBMS_REPORT.GET_TIMING_INFO(1, L_ELAPSED, L_CPU);
>
>
>
> L_REPORT_XML :=
> PRVT_REPORT_TAGS.BUILD_REPORT_TAG(
> DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT(
> 'awrv','topsql', L_REF_PARAMS),
> L_ELAPSED, L_CPU);
>
>
>
> IF (L_RM_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_RM_METRICS_XML);
> END IF;
>
> IF (L_SYS_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_SYS_METRICS_XML);
> END IF;
>
> IF (L_SQL_TIME_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_SQL_TIME_XML);
> END IF;
>
> IF (L_WAIT_TIME_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_WAIT_TIME_XML);
> END IF;
>
> IF (L_STORAGE_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_STORAGE_METRICS_XML);
> END IF;
>
> IF (L_SESSION_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_SESSION_METRICS_XML);
> END IF;
>
> IF (L_ERROR_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_ERROR_XML);
> END IF;
>
> <<DONE>>
>
>
> IF (L_REPORT_XML IS NULL) THEN
>
> L_REPORT_XML :=
> PRVT_REPORT_TAGS.BUILD_REPORT_TAG(
> DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT(
> 'awrv','topsql',L_REF_PARAMS),
> NULL, NULL);
> END IF;
>
> IF (L_SET_ENV) THEN
>
> DBMS_REPORT.RESTORE_REPORT_ENV(L_ORIG_ENV);
> END IF;
>
>
> RETURN L_REPORT_XML;
>
> END REPORT_WORKLOAD;
>
>
288,290c288,294 < IF (M_RESOLVED_DB_TYPE < IN (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, < DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP)) --- > > IF (M_RESOLVED_DB_TYPE IN > (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, > DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP) > AND > DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(P_START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) 432c436,438 < IF (SYS.DBMS_SQLTUNE_UTIL0.CDB_IS_PDB(L_CON_NAME, L_CON_ID)) THEN --- > IF (SYS.DBMS_SQLTUNE_UTIL0.CDB_IS_PDB(L_CON_NAME, L_CON_ID) AND > DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(P_START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) THEN
62a63,65
> P_INCLUDE_SQLS NUMBER := 1;
> P_JET NUMBER := 0;
> L_SERVICE_TYPE VARCHAR2(32);
532,537d534
< P_LAST_REFRESH_TIME := TO_DATE(
< DBMS_REPORT.GET_PARAM(PARAMS,
< 'last_refresh_time',
< NULLABLE=>TRUE),
< DBMS_REPORT.DATE_FMT_MOD);
<
539,540c536
< P_INST_ID := TO_NUMBER(
< DBMS_REPORT.GET_PARAM(PARAMS,'inst_id',NULLABLE=>TRUE));
---
> P_DBID := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'dbid',NULLABLE=>TRUE));
543c539,540
< P_DBID := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'dbid',NULLABLE=>TRUE));
---
> P_INST_ID := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(PARAMS,'inst_id',NULLABLE=>TRUE));
553a551
> L_SERVICE_TYPE := DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE();
556,557c554
< P_TOP_N_DETAIL := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'top_n_detail',
< NULLABLE=>TRUE));
---
> P_JET := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'is_jet', NULLABLE=>TRUE));
560,564d556
< P_OUTER_START_TIME := TO_DATE(
< DBMS_REPORT.GET_PARAM(PARAMS,'outer_start_time',
< NULLABLE=>TRUE),
< DBMS_REPORT.DATE_FMT_MOD);
<
566,569c558,577
< P_OUTER_END_TIME := TO_DATE(
< DBMS_REPORT.GET_PARAM(PARAMS,'outer_end_time',
< NULLABLE=>TRUE),
< DBMS_REPORT.DATE_FMT_MOD);
---
> IF (P_JET = 1 OR
> (L_SERVICE_TYPE IN
> (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)
> AND SYS_CONTEXT('USERENV', 'CON_ID') > 2)) THEN
>
>
> P_REPORT_LEVEL := DBMS_REPORT.GET_PARAM(PARAMS,'report_level',
> NULLABLE=>TRUE);
>
> REPORT_XML := PRVT_AWR_VIEWER.REPORT_WORKLOAD(
> SERVICE_TYPE => L_SERVICE_TYPE,
> IS_REALTIME => P_IS_REALTIME,
> START_TIME => P_START_TIME,
> END_TIME => P_END_TIME,
> DBID => P_DBID,
> REPORT_LEVEL => P_REPORT_LEVEL,
> SHOW_SQL => P_SHOW_SQL);
572,573c580
< P_DIM_NAME := DBMS_REPORT.GET_PARAM(PARAMS,'dim_name',NULLABLE=>TRUE);
< P_DIM_STAT := DBMS_REPORT.GET_PARAM(PARAMS,'dim_stat',NULLABLE=>TRUE);
---
> ELSE
575,587c582,601
< REPORT_XML := PRVT_AWR_VIEWER.REPORT_TOPSQL_XML(
< START_TIME => P_START_TIME,
< END_TIME => P_END_TIME,
< LAST_REFRESH_TIME => P_LAST_REFRESH_TIME,
< INST_ID => P_INST_ID,
< DBID => P_DBID,
< IS_REALTIME => P_IS_REALTIME,
< TOP_N_DETAIL => P_TOP_N_DETAIL,
< OUTER_START_TIME => P_OUTER_START_TIME,
< OUTER_END_TIME => P_OUTER_END_TIME,
< DIM_NAME => P_DIM_NAME,
< DIM_STAT => P_DIM_STAT,
< SHOW_SQL => P_SHOW_SQL);
---
>
> P_INCLUDE_SQLS := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(PARAMS,'include_sqls',
> NULLABLE=>TRUE));
>
> P_LAST_REFRESH_TIME := TO_DATE(
> DBMS_REPORT.GET_PARAM(PARAMS,
> 'last_refresh_time',
> NULLABLE=>TRUE),
> DBMS_REPORT.DATE_FMT_MOD);
>
>
> P_TOP_N_DETAIL := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'top_n_detail',
> NULLABLE=>TRUE));
>
>
> P_OUTER_START_TIME := TO_DATE(
> DBMS_REPORT.GET_PARAM(PARAMS,'outer_start_time',
> NULLABLE=>TRUE),
> DBMS_REPORT.DATE_FMT_MOD);
588a603,627
>
> P_OUTER_END_TIME := TO_DATE(
> DBMS_REPORT.GET_PARAM(PARAMS,'outer_end_time',
> NULLABLE=>TRUE),
> DBMS_REPORT.DATE_FMT_MOD);
>
>
> P_DIM_NAME := DBMS_REPORT.GET_PARAM(PARAMS,'dim_name',NULLABLE=>TRUE);
> P_DIM_STAT := DBMS_REPORT.GET_PARAM(PARAMS,'dim_stat',NULLABLE=>TRUE);
>
> REPORT_XML := PRVT_AWR_VIEWER.REPORT_TOPSQL_XML(
> START_TIME => P_START_TIME,
> END_TIME => P_END_TIME,
> LAST_REFRESH_TIME => P_LAST_REFRESH_TIME,
> INST_ID => P_INST_ID,
> DBID => P_DBID,
> IS_REALTIME => P_IS_REALTIME,
> TOP_N_DETAIL => P_TOP_N_DETAIL,
> OUTER_START_TIME => P_OUTER_START_TIME,
> OUTER_END_TIME => P_OUTER_END_TIME,
> DIM_NAME => P_DIM_NAME,
> DIM_STAT => P_DIM_STAT,
> INCLUDE_SQLS => P_INCLUDE_SQLS,
> SHOW_SQL => P_SHOW_SQL);
> END IF;
1179a1180 > L_IDX := DRIXMD.GETINDEXRECBYID(IDXID); 1203a1205,1209 > > IF (L_IDXTYPE = 'CONTEXT_V2' AND IS_PART) THEN > DRVXTAB.CREATE_INDEX_INDEXES(L_IDX, PARDEG=>PARA, SYSPART=>TRUE); > END IF; > 1285a1292,1305 > > > > IF (L_IDXT = DRIXMD.IDX_TYPE_CONTEXT2) THEN > DRVXTAB.CREATE_INDEX_TABLES(L_IDX, SYS_PART=>IS_SYS_PART); > > > > IF (NOT IS_SYS_PART) THEN > DRVXTAB.CREATE_INDEX_INDEXES(L_IDX, PARDEG=>PARA, > SYSPART=>IS_SYS_PART); > END IF; > END IF; > 1371c1391,1397 < DRVXTAB.CREATE_INDEX_INDEXES(L_IDX, PARDEG=> PARA, SYSPART=>IS_SYS_PART); --- > > > > > IF (NOT IS_SYS_PART) THEN > DRVXTAB.CREATE_INDEX_INDEXES(L_IDX, PARDEG=> PARA, SYSPART=>IS_SYS_PART); > END IF;
2615a2616,2621 > > > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PATCH%' THEN > RETURN 'Y'; > ELSIF (TMP2) LIKE '%_LOG_SEGMENT_DUMP_PARAMETER%' THEN > RETURN 'Y';
9a10,17
> G_TABNAM1 VARCHAR2(130);
> G_TABNAM1_NQ VARCHAR2(130);
> G_TABNAM2 VARCHAR2(130);
> G_TABNAM2_NQ VARCHAR2(130);
> G_COLNAM1 VARCHAR2(1024);
> G_COLNAM1_NQ VARCHAR2(1024);
> G_COLNAM2 VARCHAR2(1024);
> G_COLNAM2_NQ VARCHAR2(1024);
24d31
< PART1 VARCHAR2(130);
27,29d33
< PART2 VARCHAR2(130);
< COLS SYS.ODCICOLINFOLIST;
< COLS2 SYS.ODCICOLINFOLIST;
70a75,76
> TPTN1_NQ VARCHAR2(130) := NULL;
> TPTN2_NQ VARCHAR2(130) := NULL;
74a81,84
> TPTN1_IDEN NUMBER;
> TPTN2_IDEN NUMBER;
> TPTN1_IDEN_STR VARCHAR2(100);
> TPTN2_IDEN_STR VARCHAR2(100);
79,80d88
< TABLE1_IDX_PARTITION_STR VARCHAR2(128) := 'null';
< TABLE2_IDX_PARTITION_STR VARCHAR2(128) := 'null';
126a135
> TSTSTR := SYS.DBMS_ASSERT.ENQUOTE_LITERAL(PARAMS);
127a137,138
> BEGIN
>
129,132c140,148
< TABLE_NAME11 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABLE_NAME1);
< TABLE_NAME22 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABLE_NAME2);
< TNAME1 := TABLE_NAME11;
< TNAME2 := TABLE_NAME22;
---
> SELECT INSTR(TABLE_NAME1, '.') INTO LEN FROM SYS.DUAL;
> IF (LEN > 0) THEN
> TNAME1 := SUBSTR(TABLE_NAME1, LEN+1);
> IF ( SDO_UTIL.IS_BUMPY_CASE(TNAME1) ) THEN
> G_TABNAM1 := TNAME1;
> ELSE
> G_TABNAM1 := REPLACE(NLS_UPPER(TNAME1), '"');
> END IF;
> G_TABNAM1_NQ := REPLACE(G_TABNAM1, '"');
134,136c150,164
< TSTSTR := SYS.DBMS_ASSERT.ENQUOTE_LITERAL(PARAMS);
< BEGIN
< SELECT INSTR(TABLE_NAME11, '.') INTO LEN FROM SYS.DUAL;
---
> SELECT SDO_UTIL.GET_QUOTED_NAME(RPAD(TABLE_NAME1, LEN-1)) INTO SCHEMA1
> FROM SYS.DUAL;
> ELSE
> SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER') INTO SCHEMA1
> FROM SYS.DUAL;
> TNAME1 := TABLE_NAME1;
> IF ( SDO_UTIL.IS_BUMPY_CASE(TNAME1) ) THEN
> G_TABNAM1 := TNAME1;
> ELSE
> G_TABNAM1 := REPLACE(NLS_UPPER(TNAME1), '"');
> END IF;
> G_TABNAM1_NQ := REPLACE(G_TABNAM1, '"');
> END IF;
>
> SELECT INSTR(TABLE_NAME2, '.') INTO LEN FROM SYS.DUAL;
138,139c166,175
< TNAME1 := NLS_UPPER(SUBSTR(TABLE_NAME11, LEN+1)) ;
< SELECT SDO_UTIL.GET_QUOTED_NAME(RPAD(TABLE_NAME11, LEN-1)) INTO SCHEMA1 FROM SYS.DUAL;
---
> TNAME2 := SUBSTR(TABLE_NAME2, LEN+1);
> IF ( SDO_UTIL.IS_BUMPY_CASE(TNAME2) ) THEN
> G_TABNAM2 := TNAME2;
> ELSE
> G_TABNAM2 := REPLACE(NLS_UPPER(TNAME2), '"');
> END IF;
> G_TABNAM2_NQ := REPLACE(G_TABNAM2, '"');
>
> SELECT SDO_UTIL.GET_QUOTED_NAME(RPAD(TABLE_NAME2, LEN-1)) INTO SCHEMA2
> FROM SYS.DUAL;
141,142c177,185
< SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER') INTO SCHEMA1 FROM SYS.DUAL;
< TNAME1 := NLS_UPPER(TABLE_NAME11);
---
> SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER') INTO SCHEMA2
> FROM SYS.DUAL;
> TNAME2 := TABLE_NAME2;
> IF ( SDO_UTIL.IS_BUMPY_CASE(TNAME2) ) THEN
> G_TABNAM2 := TNAME2;
> ELSE
> G_TABNAM2 := REPLACE(NLS_UPPER(TNAME2), '"');
> END IF;
> G_TABNAM2_NQ := REPLACE(G_TABNAM2, '"');
143a187,192
>
> TABLE_NAME11 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM1);
> TABLE_NAME22 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM2);
> TNAME1 := TABLE_NAME11;
> TNAME2 := TABLE_NAME22;
>
148,155d196
< SELECT INSTR(TABLE_NAME22, '.') INTO LEN FROM SYS.DUAL;
< IF (LEN > 0) THEN
< TNAME2 := NLS_UPPER(SUBSTR(TABLE_NAME22, LEN+1)) ;
< SELECT SDO_UTIL.GET_QUOTED_NAME(RPAD(TABLE_NAME22, LEN-1)) INTO SCHEMA2 FROM SYS.DUAL;
< ELSE
< SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER') INTO SCHEMA2 FROM SYS.DUAL;
< TNAME2 := NLS_UPPER(TABLE_NAME22);
< END IF;
161c202,208
< TPTN1 := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NLS_UPPER(TABLE1_PARTITION));
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE1_PARTITION) ) THEN
> TPTN1 := TABLE1_PARTITION;
> ELSE
> TPTN1 := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(REPLACE(NLS_UPPER(TABLE1_PARTITION), '"'));
> END IF;
> TPTN1_NQ := REPLACE(TPTN1, '"');
>
163a211
>
165c213,219
< TPTN2 := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NLS_UPPER(TABLE2_PARTITION));
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE2_PARTITION) ) THEN
> TPTN2 := TABLE2_PARTITION;
> ELSE
> TPTN2 := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(REPLACE(NLS_UPPER(TABLE2_PARTITION), '"'));
> END IF;
> TPTN2_NQ := REPLACE(TPTN2, '"');
>
170c224,238
< FNAME_LEN := INSTR(COLUMN_NAME1, '(');
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME1) ) THEN
> G_COLNAM1 := COLUMN_NAME1;
> ELSE
> G_COLNAM1 := REPLACE(NLS_UPPER(COLUMN_NAME1), '"');
> END IF;
> G_COLNAM1_NQ := REPLACE(G_COLNAM1, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME2) ) THEN
> G_COLNAM2 := COLUMN_NAME2;
> ELSE
> G_COLNAM2 := REPLACE(NLS_UPPER(COLUMN_NAME2), '"');
> END IF;
> G_COLNAM2_NQ := REPLACE(G_COLNAM2, '"');
>
> FNAME_LEN := INSTR(G_COLNAM1, '(');
174,175c242
< INP_COL_NAME1 :=
< NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME1));
---
> INP_COL_NAME1 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM1);
179c246
< INP_COL_NAME1 := MDSYS.PRVT_IDX.ASSERT_FNCOL(NLS_UPPER(COLUMN_NAME1));
---
> INP_COL_NAME1 := MDSYS.PRVT_IDX.ASSERT_FNCOL(NLS_UPPER(G_COLNAM1));
193c260
< FNAME_LEN := INSTR(COLUMN_NAME2, '(');
---
> FNAME_LEN := INSTR(G_COLNAM2, '(');
197,198c264
< INP_COL_NAME2 :=
< NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME2));
---
> INP_COL_NAME2 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM2);
202c268
< INP_COL_NAME2 := MDSYS.PRVT_IDX.ASSERT_FNCOL(NLS_UPPER(COLUMN_NAME2));
---
> INP_COL_NAME2 := MDSYS.PRVT_IDX.ASSERT_FNCOL(G_COLNAM2);
224,228c290,296
< SELECT DISTINCT SDO_INDEX_OWNER, INDEX_NAME INTO IOWN1, INAME1
< FROM MDSYS.ALL_SDO_INDEX_INFO
< WHERE TABLE_NAME = TNAME1
< AND COLUMN_NAME = INP_COL_NAME1
< AND TABLE_OWNER = SCHEMA1 ;
---
> STMT := 'SELECT distinct sdo_index_owner, index_name ' ||
> 'FROM mdsys.all_sdo_index_info ' ||
> 'WHERE table_name = :tab ' ||
> 'and column_name = :col ' ||
> 'and table_owner = :sch';
> EXECUTE IMMEDIATE STMT INTO IOWN1, INAME1
> USING G_TABNAM1_NQ, G_COLNAM1_NQ, SCHEMA1;
241,245c309,315
< SELECT DISTINCT SDO_INDEX_OWNER, INDEX_NAME INTO IOWN2, INAME2
< FROM MDSYS.ALL_SDO_INDEX_INFO
< WHERE TABLE_NAME = TNAME2
< AND COLUMN_NAME = INP_COL_NAME2
< AND TABLE_OWNER = SCHEMA2 ;
---
> STMT := 'SELECT distinct sdo_index_owner, index_name ' ||
> 'FROM mdsys.all_sdo_index_info ' ||
> 'WHERE table_name = :tab ' ||
> 'and column_name = :col ' ||
> 'and table_owner = :sch';
> EXECUTE IMMEDIATE STMT INTO IOWN2, INAME2
> USING G_TABNAM2_NQ, G_COLNAM2_NQ, SCHEMA2;
250,252c320,324
< TNAME1,
< INP_COL_NAME1,
< NDIM1, SRID1);
---
> G_TABNAM1,
> G_COLNAM1,
> NDIM1,
> SRID1);
>
254,256c326,330
< TNAME2,
< INP_COL_NAME2,
< NDIM2, SRID2);
---
> G_TABNAM2,
> G_COLNAM2,
> NDIM2,
> SRID2);
>
268,270c342,348
< SELECT COLUMN_NAME INTO COL_NAME11 FROM SYS.ALL_IND_COLUMNS
< WHERE INDEX_OWNER = IOWN1 AND INDEX_NAME = INAME1 ;
< COL_NAME1 := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL_NAME11);
---
> STMT := 'SELECT column_name ' ||
> 'FROM sys.all_ind_columns ' ||
> 'WHERE index_owner = :own ' ||
> 'AND index_name = :idx';
> EXECUTE IMMEDIATE STMT INTO COL_NAME11
> USING IOWN1, INAME1;
> COL_NAME1 := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL_NAME11);
274,275c352,357
< SELECT COLUMN_NAME INTO COL_NAME22 FROM SYS.ALL_IND_COLUMNS
< WHERE INDEX_OWNER = IOWN2 AND INDEX_NAME = INAME2;
---
> STMT := 'SELECT column_name ' ||
> 'FROM sys.all_ind_columns ' ||
> 'WHERE index_owner = :own ' ||
> 'AND index_name = :idx';
> EXECUTE IMMEDIATE STMT INTO COL_NAME22
> USING IOWN2, INAME2;
284,290c366,375
< STMT := 'SELECT /*+ RESULT_CACHE */ partition_name FROM sys.all_ind_partitions ' ||
< ' WHERE index_owner = :1 and ' ||
< ' index_name = :2 and partition_position = ' ||
< ' (SELECT partition_position FROM ' ||
< ' sys.all_tab_partitions ' ||
< ' WHERE table_name = :3 and partition_name = :4 ' ||
< ' and table_owner = :5 ) ';
---
> STMT := 'SELECT /*+ RESULT_CACHE */ partition_name ' ||
> 'FROM sys.all_ind_partitions ' ||
> 'WHERE index_owner = :1 ' ||
> 'AND index_name = :2 ' ||
> 'AND partition_position = ' ||
> ' (SELECT partition_position ' ||
> ' FROM sys.all_tab_partitions ' ||
> ' WHERE table_name = :3 ' ||
> ' AND partition_name = :4 ' ||
> ' AND table_owner = :5) ';
292c377
< USING IOWN1, INAME1, TNAME1, TPTN1, SCHEMA1;
---
> USING IOWN1, INAME1, G_TABNAM1_NQ, TPTN1_NQ, SCHEMA1;
293a379
> TPTN1_IDEN := SDO_UTIL.GET_TABLE_PTN_OBJ_ID(IOWN1, G_TABNAM1_NQ, TPTN1_NQ);
296a383
> TPTN1_IDEN_STR := SDO_UTIL.NUMBER_TO_CHAR(TPTN1_IDEN);
301c388
< ',' || TNAME11 || ', ''"' || COL_NAME1 ||
---
> ',' || TNAME11 || ', ''"' || REPLACE(COL_NAME1, '"') ||
303c390
< TPTN11 || ', 0,0,1,1)), ' ||
---
> TPTN11 || ', 0,0,' || TPTN1_IDEN_STR || ',1)), ' ||
307a395
>
314,317d401
<
<
< TABLE1_IDX_PARTITION_STR := SYS.DBMS_ASSERT.ENQUOTE_LITERAL(
< REPLACE(SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), '''',''''''));
323c407
< ',' || TNAME11 || ', ''"' || COL_NAME1 ||
---
> ',' || TNAME11 || ', ''"' || REPLACE(COL_NAME1, '"') ||
333d416
<
350c433
< USING IOWN2, INAME2, TNAME2, TPTN2, SCHEMA2;
---
> USING IOWN2, INAME2, G_TABNAM2_NQ, TPTN2_NQ, SCHEMA2;
351a435
> TPTN2_IDEN := SDO_UTIL.GET_TABLE_PTN_OBJ_ID(IOWN2, G_TABNAM2_NQ, TPTN2_NQ);
354a439
> TPTN2_IDEN_STR := SDO_UTIL.NUMBER_TO_CHAR(TPTN2_IDEN);
359c444
< ',' || TNAME22 || ', ''"' || COL_NAME2 ||
---
> ',' || TNAME22 || ', ''"' || REPLACE(COL_NAME2, '"') ||
361c446
< TPTN22 || ', 0, 0,1,1)), ' ||
---
> TPTN22 || ', 0, 0,' || TPTN2_IDEN_STR || ',1)), ' ||
373,376d457
<
<
< TABLE2_IDX_PARTITION_STR := SYS.DBMS_ASSERT.ENQUOTE_LITERAL(
< REPLACE(SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), '''',''''''));
382c463
< ',' || TNAME22 || ', ''"' || COL_NAME2 ||
---
> ',' || TNAME22 || ', ''"' || REPLACE(COL_NAME2, '"') ||
393d473
<
485,488c565,573
< FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE) ||
< ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) ';
---
> IF ( IPTN1 IS NULL ) THEN
> FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE);
> ELSE
> FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME1), FALSE) ||
> ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) ';
> END IF;
496,499c581,589
< FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE) ||
< ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) ';
---
> IF ( IPTN2 IS NULL ) THEN
> FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE);
> ELSE
> FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NITABNAME2), FALSE) ||
> ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) ';
> END IF;
507,510c597,605
< FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE) ||
< ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) ';
---
> IF ( IPTN1 IS NULL ) THEN
> FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE);
> ELSE
> FULLTABNM1 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME1), FALSE) ||
> ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN1), FALSE) || ' ) ';
> END IF;
518,521c613,621
< FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE) ||
< ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
< SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) ';
---
> IF ( IPTN2 IS NULL ) THEN
> FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE);
> ELSE
> FULLTABNM2 := SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(ITABNAME2), FALSE) ||
> ' PARTITION ( ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(
> SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IPTN2), FALSE) || ' ) ';
> END IF;
106a107 > SDO_RTREE_READ_ONLY IN NUMBER,
119a120 >
134a135 > SDO_RTREE_READ_ONLY IN NUMBER,
23a24,29 > -- Get the object ID of the specified table partition (as table owner) > FUNCTION get_table_ptn_obj_id(table_owner IN VARCHAR2, > table_name IN VARCHAR2, > table_ptn IN VARCHAR2 DEFAULT NULL) > return NUMBER; > 54a61,66 > > -- Is object name double-quoted and bumpy-case? > -- FALSE=NO, TRUE=YES > FUNCTION is_bumpy_case(name IN VARCHAR2, > skip_quotes IN boolean default FALSE) > RETURN boolean DETERMINISTIC;
29c29 < IF(OWNER_IN = CURR_USER) THEN --- > IF(OWNER_IN = CURR_USER) THEN 136,139c136 < GET_GEOM_METADATA_INT(ISNAME, < NLS_UPPER(ITAB), < NLS_UPPER(ICOL), < NDIM, SRID); --- > GET_GEOM_METADATA_INT(ISNAME, ITAB, ICOL, NDIM, SRID); 152,155c149 < GET_GEOM_METADATA(ISNAME, < NLS_UPPER(ITAB), < NLS_UPPER(ICOL), < NDIM, SRID); --- > GET_GEOM_METADATA(ISNAME, ITAB, ICOL, NDIM, SRID); 177,180c171,173 < GET_GEOM_METADATA_INT(ISNAME, < NLS_UPPER(ITAB), < NLS_UPPER(ICOL), < NDIM, SRID); --- > GET_GEOM_METADATA_INT(ISNAME, ITAB, ICOL, NDIM, SRID); > > 194,197c187 < GET_GEOM_DIMINFO_INT(ISNAME, < NLS_UPPER(ITAB), < NLS_UPPER(ICOL), < DIMINFO); --- > GET_GEOM_DIMINFO_INT(ISNAME, ITAB, ICOL, DIMINFO); 213,216c203 < GET_GEOM_METADATA(ISNAME, < NLS_UPPER(ITAB), < NLS_UPPER(ICOL), < NDIM, SRID, DIMINFO); --- > GET_GEOM_METADATA(ISNAME, ITAB, ICOL, NDIM, SRID, DIMINFO); 231,232c218,219 < ITAB IN VARCHAR2, < ICOL IN VARCHAR2) --- > ITAB IN VARCHAR2, > ICOL IN VARCHAR2) 237,240c224,226 < GET_GEOM_METADATA_INT(ISNAME, < NLS_UPPER(ITAB), < NLS_UPPER(ICOL), < NDIM, SRID); --- > GET_GEOM_METADATA_INT(ISNAME, ITAB, ICOL, NDIM, SRID); > >
70a71 > SDO_RTREE_READ_ONLY, 152a154 > SDO_RTREE_READ_ONLY CONSTANT NUMBER := 0; 219a222 > SDO_RTREE_READ_ONLY, 260a264 > ',' || SDO_RTREE_READ_ONLY || 542c546 < TMP_NAME := 'TMP_' || SYS.DBMS_ASSERT.NOOP(ITAB1); --- > TMP_NAME := 'TMP_' || ITAB1; 568,573c572,577 < SET SDO_INDEX_NAME = SYS.DBMS_ASSERT.NOOP(TMP_NAME), < SDO_INDEX_OWNER = SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA), < SDO_TSNAME = SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA), < SDO_INDEX_TABLE = SYS.DBMS_ASSERT.NOOP(ITAB2), < SDO_NL_INDEX_TABLE = SYS.DBMS_ASSERT.NOOP(NITAB2), < SDO_RTREE_SEQ_NAME = SYS.DBMS_ASSERT.NOOP(ISEQ2), --- > SET SDO_INDEX_NAME = TMP_NAME, > SDO_INDEX_OWNER = IA1.INDEXSCHEMA, > SDO_TSNAME = IA1.INDEXSCHEMA, > SDO_INDEX_TABLE = ITAB2, > SDO_NL_INDEX_TABLE = NITAB2, > SDO_RTREE_SEQ_NAME = ISEQ2, 576,579c580,583 < WHERE SDO_INDEX_TABLE = SYS.DBMS_ASSERT.NOOP(ITAB1) < AND SDO_INDEX_NAME = SYS.DBMS_ASSERT.NOOP(IA.INDEXNAME) < AND SDO_INDEX_OWNER = SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA) < AND SDO_INDEX_PARTITION = SYS.DBMS_ASSERT.NOOP(IA.INDEXPARTITION); --- > WHERE SDO_INDEX_TABLE = ITAB1 > AND SDO_INDEX_NAME = IA.INDEXNAME > AND SDO_INDEX_OWNER = IA.INDEXSCHEMA > AND SDO_INDEX_PARTITION = IA.INDEXPARTITION; 583,586c587,590 < MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA), < SYS.DBMS_ASSERT.NOOP(IA.INDEXNAME), < SYS.DBMS_ASSERT.NOOP(IA.INDEXPARTITION), < SYS.DBMS_ASSERT.NOOP(ITAB1)); --- > MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(IA.INDEXSCHEMA, > IA.INDEXNAME, > IA.INDEXPARTITION, > ITAB1); 598,604c602,608 < SET SDO_INDEX_NAME = SYS.DBMS_ASSERT.NOOP(IA.INDEXNAME), < SDO_INDEX_OWNER = SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA), < SDO_TSNAME = SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA), < SDO_INDEX_TABLE = SYS.DBMS_ASSERT.NOOP(ITAB1), < SDO_NL_INDEX_TABLE = SYS.DBMS_ASSERT.NOOP(NITAB1), < SDO_RTREE_SEQ_NAME = SYS.DBMS_ASSERT.NOOP(ISEQ1), < SDO_INDEX_PARTITION = SYS.DBMS_ASSERT.NOOP(IA.INDEXPARTITION), --- > SET SDO_INDEX_NAME = IA.INDEXNAME, > SDO_INDEX_OWNER = IA.INDEXSCHEMA, > SDO_TSNAME = IA.INDEXSCHEMA, > SDO_INDEX_TABLE = ITAB1, > SDO_NL_INDEX_TABLE = NITAB1, > SDO_RTREE_SEQ_NAME = ISEQ1, > SDO_INDEX_PARTITION = IA.INDEXPARTITION, 606,608c610,612 < WHERE SDO_INDEX_TABLE = SYS.DBMS_ASSERT.NOOP(ITAB2) < AND SDO_INDEX_NAME = SYS.DBMS_ASSERT.NOOP(IA1.INDEXNAME) < AND SDO_INDEX_OWNER = SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA) --- > WHERE SDO_INDEX_TABLE = ITAB2 > AND SDO_INDEX_NAME = IA1.INDEXNAME > AND SDO_INDEX_OWNER = IA1.INDEXSCHEMA 613,616c617,620 < MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA), < SYS.DBMS_ASSERT.NOOP(IA1.INDEXNAME), < SYS.DBMS_ASSERT.NOOP(IA1.INDEXPARTITION), < SYS.DBMS_ASSERT.NOOP(ITAB2)); --- > MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(IA1.INDEXSCHEMA, > IA1.INDEXNAME, > IA1.INDEXPARTITION, > ITAB2); 627,628c631,632 < SET SDO_INDEX_NAME = SYS.DBMS_ASSERT.NOOP(IA1.INDEXNAME) < WHERE SDO_INDEX_NAME = SYS.DBMS_ASSERT.NOOP(TMP_NAME); --- > SET SDO_INDEX_NAME = IA1.INDEXNAME > WHERE SDO_INDEX_NAME = TMP_NAME; 642,644c646,648 < SET SDO_INDEX_NAME= SYS.DBMS_ASSERT.NOOP(IA1.INDEXNAME), < SDO_INDEX_OWNER= SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA), < SDO_TSNAME=SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA), --- > SET SDO_INDEX_NAME= IA1.INDEXNAME, > SDO_INDEX_OWNER= IA1.INDEXSCHEMA, > SDO_TSNAME=IA1.INDEXSCHEMA, 647,649c651,653 < WHERE SDO_INDEX_TABLE= SYS.DBMS_ASSERT.NOOP(ITAB1) < AND SDO_INDEX_NAME= SYS.DBMS_ASSERT.NOOP(IA.INDEXNAME) < AND SDO_INDEX_OWNER= SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA); --- > WHERE SDO_INDEX_TABLE= ITAB1 > AND SDO_INDEX_NAME= IA.INDEXNAME > AND SDO_INDEX_OWNER= IA.INDEXSCHEMA; 653,656c657,660 < MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA), < SYS.DBMS_ASSERT.NOOP(IA.INDEXNAME), < SYS.DBMS_ASSERT.NOOP(IA.INDEXPARTITION), < SYS.DBMS_ASSERT.NOOP(ITAB1)); --- > MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(IA.INDEXSCHEMA, > IA.INDEXNAME, > IA.INDEXPARTITION, > ITAB1); 668c672 < SET SDO_INDEX_NAME= SYS.DBMS_ASSERT.NOOP(IA.INDEXNAME), --- > SET SDO_INDEX_NAME= IA.INDEXNAME, 670,675c674,679 < SDO_INDEX_OWNER= SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA), < SDO_TSNAME= SYS.DBMS_ASSERT.NOOP(IA.INDEXSCHEMA), < SDO_INDEX_PARTITION= SYS.DBMS_ASSERT.NOOP(IA.INDEXPARTITION) < WHERE SDO_INDEX_TABLE= SYS.DBMS_ASSERT.NOOP(ITAB2) < AND SDO_INDEX_NAME=SYS.DBMS_ASSERT.NOOP(IA1.INDEXNAME) < AND SDO_INDEX_OWNER=SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA); --- > SDO_INDEX_OWNER= IA.INDEXSCHEMA, > SDO_TSNAME= IA.INDEXSCHEMA, > SDO_INDEX_PARTITION= IA.INDEXPARTITION > WHERE SDO_INDEX_TABLE= ITAB2 > AND SDO_INDEX_NAME=IA1.INDEXNAME > AND SDO_INDEX_OWNER=IA1.INDEXSCHEMA; 679,682c683,686 < MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(SYS.DBMS_ASSERT.NOOP(IA1.INDEXSCHEMA), < SYS.DBMS_ASSERT.NOOP(IA1.INDEXNAME), < SYS.DBMS_ASSERT.NOOP(IA1.INDEXPARTITION), < SYS.DBMS_ASSERT.NOOP(ITAB2)); --- > MDSYS.MDPRVT_IDX.INVALIDATE_CACHE(IA1.INDEXSCHEMA, > IA1.INDEXNAME, > IA1.INDEXPARTITION, > ITAB2); 748a753 > SDO_RTREE_READ_ONLY NUMBER; 788,789d792 < COLNAME := REPLACE(COLNAME, '"'); < 795a799,802 > ELSIF ( SDO_UTIL.IS_BUMPY_CASE(COLNAME, TRUE) ) THEN > COLNAME := '"' || COLNAME || '"'; > ELSE > COLNAME := REPLACE(NLS_UPPER(COLNAME), '"'); 803,804c810,817 < AND SDO_INDEX_NAME = SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(IA.INDEXNAME) < AND SDO_TSNAME = SYS.DBMS_ASSERT.SCHEMA_NAME(TSNAME); --- > AND SDO_INDEX_NAME = IA.INDEXNAME > AND SDO_TSNAME = TSNAME; > > IF ( SDO_UTIL.IS_BUMPY_CASE(TABNAME, TRUE) ) THEN > TABNAME := '"' || TABNAME || '"'; > ELSE > TABNAME := REPLACE(NLS_UPPER(TABNAME), '"'); > END IF; 833c846 < FROM MDSYS.SDO_GEOM_METADATA_TABLE --- > FROM MDSYS.SDO_GEOM_METADATA_TABLE 835c848 < AND SDO_TABLE_NAME = SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(TABNAME) --- > AND SDO_TABLE_NAME = TABNAME 964a978 > SDO_RTREE_READ_ONLY, 1159a1174,1176 > SDO_UTIL.NUMBER_TO_CHAR(SDO_RTREE_READ_ONLY)) || COMMA; > > STMT1 := STMT1 || SYS.DBMS_ASSERT.ENQUOTE_LITERAL( 1243a1261 > SDO_RTREE_READ_ONLY IN NUMBER, 1295a1314 > SDO_RTREE_READ_ONLY, 1333a1353 > SDO_RTREE_READ_ONLY, 1373a1394 > SDO_RTREE_READ_ONLY, 1413a1435 > SDO_RTREE_READ_ONLY,
59a60,78
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(BASETABLE) ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Bumpy-case "basetable" name is not supported');
> RETURN;
> END IF;
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(BASECOL) ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Bumpy-case "basecol" name is not supported');
> RETURN;
> END IF;
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(BLKTABLE) ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Bumpy-case "blktable" name is not supported');
> RETURN;
> END IF;
>
42a43,46 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(1024); > G_COLNAM_NQ VARCHAR2(1024); 44a49,62 > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLENAME) ) THEN > G_TABNAM := TABLENAME; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(TABLENAME), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(COLNAME) ) THEN > G_COLNAM := COLNAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(COLNAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > 86,88c104,108 < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(TABLENAME), < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME), < NDIM, SRID, DIM); --- > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM), > NDIM, > SRID, > DIM); 103c123 < USING NLS_UPPER(TABLENAME), NLS_UPPER(AGGR_COL_STRING); --- > USING TABLENAME, NLS_UPPER(AGGR_COL_STRING); 118c138 < INTO OWNR USING NLS_UPPER(TABLENAME); --- > INTO OWNR USING TABLENAME; 131c151 < USING NLS_UPPER(TABLENAME), NLS_UPPER(AGGR_COL_STRING), OWNR; --- > USING TABLENAME, NLS_UPPER(AGGR_COL_STRING), OWNR; 148c168 < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME) || --- > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM) || 155c175 < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME) || --- > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM) ||
77,78c77,78 < UPPER(OWNER) = UPPER(BTSCHEMA) AND < UPPER(TRIGGER_NAME) = UPPER(DMLT); --- > NLS_UPPER(OWNER) = NLS_UPPER(BTSCHEMA) AND > NLS_UPPER(TRIGGER_NAME) = NLS_UPPER(DMLT);
1059,1060c1059,1063 < FUNCTION RELATE(GEOM1 IN MDSYS.SDO_GEOMETRY, GEOM2 IN MDSYS.SDO_GEOMETRY, < MASK IN VARCHAR2, TAB1 IN VARCHAR2, COL1 IN VARCHAR2) --- > FUNCTION RELATE(GEOM1 IN MDSYS.SDO_GEOMETRY, > GEOM2 IN MDSYS.SDO_GEOMETRY, > MASK IN VARCHAR2, > TAB1 IN VARCHAR2, > COL1 IN VARCHAR2) 1062,1064c1065,1069 < DIM MDSYS.SDO_DIM_ARRAY; < STMT VARCHAR2(500); < RETMASK VARCHAR2(32); --- > DIM MDSYS.SDO_DIM_ARRAY; > STMT VARCHAR2(500); > RETMASK VARCHAR2(32); > G_TABNAM VARCHAR2(130); > G_COLNAM VARCHAR2(1024); 1067c1072 < IF GEOM1 IS NULL THEN --- > IF GEOM1 IS NULL THEN 1069,1070c1074,1075 < END IF; < IF GEOM2 IS NULL THEN --- > END IF; > IF GEOM2 IS NULL THEN 1072c1077,1089 < END IF; --- > END IF; > > IF ( SDO_UTIL.IS_BUMPY_CASE(TAB1) ) THEN > G_TABNAM := TAB1; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(TAB1), '"'); > END IF; > > IF ( SDO_UTIL.IS_BUMPY_CASE(COL1) ) THEN > G_COLNAM := COL1; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(COL1), '"'); > END IF; 1077,1078c1094,1097 < STMT := 'SELECT diminfo FROM ' || ' MDSYS.USER_SDO_GEOM_METADATA WHERE ' || < 'TABLE_NAME = :tab1 AND ''"''||COLUMN_NAME||''"'' = :col '; --- > STMT := 'SELECT diminfo ' || > 'FROM USER_SDO_GEOM_METADATA ' || > 'WHERE TABLE_NAME = :tab1 ' || > 'AND COLUMN_NAME = :col '; 1082,1085c1101,1103 < EXECUTE IMMEDIATE STMT < INTO DIM < USING NLS_UPPER(SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(TAB1)), < NLS_UPPER(SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL1)); --- > EXECUTE IMMEDIATE STMT INTO DIM > USING SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM), > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_COLNAM); 1100c1118,1120 < PROCEDURE RELATE_PROCESS(MASK VARCHAR2, RESULT VARCHAR2, LOOKUP VARCHAR2, --- > PROCEDURE RELATE_PROCESS(MASK VARCHAR2, > RESULT VARCHAR2, > LOOKUP VARCHAR2, 1348c1368,1369 < FUNCTION FILTER(GEOM1 IN MDSYS.SDO_GEOMETRY, GEOM2 IN MDSYS.SDO_GEOMETRY, --- > FUNCTION FILTER(GEOM1 IN MDSYS.SDO_GEOMETRY, > GEOM2 IN MDSYS.SDO_GEOMETRY, 1351c1372,1373 < SCTX IN OUT MDSYS.SDO_INDEX_METHOD_10I, SCNFLAG NUMBER, --- > SCTX IN OUT MDSYS.SDO_INDEX_METHOD_10I, > SCNFLAG NUMBER, 1850,1851c1872,1873 < IF (IDX = 1) THEN < TGEOM := GENERATE_BUFFER(SDO_UTIL.EXTRACT(GEOM, IDX), --- > IF (IDX = 1) THEN > TGEOM := GENERATE_BUFFER(SDO_UTIL.EXTRACT(GEOM, IDX), 1853,1860c1875,1886 < ELSE < TMPG := GENERATE_BUFFER(SDO_UTIL.EXTRACT(GEOM, IDX), < UNITDIST, SMA, IFLAT, ARCT); < TMPG2 := SDO_GEOM.SDO_UNION(TMPG, TGEOM, TOL); < TGEOM := TMPG2; < END IF; < END LOOP; < RETJBUF := TGEOM; --- > > TGEOM := SDO_UTIL.RECTIFY_GEOMETRY(TGEOM, TOL); > ELSE > TMPG := GENERATE_BUFFER(SDO_UTIL.EXTRACT(GEOM, IDX), > UNITDIST, SMA, IFLAT, ARCT); > > TMPG := SDO_UTIL.RECTIFY_GEOMETRY(TMPG, TOL); > TMPG2 := SDO_GEOM.SDO_UNION(TMPG, TGEOM, TOL); > TGEOM := TMPG2; > END IF; > END LOOP; > RETJBUF := TGEOM;
429a430,436
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_OUTNAM VARCHAR2(130);
> G_OUTNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
> STMT VARCHAR2(4000);
432a440,460
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_IN) ) THEN
> G_TABNAM := TABLE_IN;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(TABLE_IN), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_OUT) ) THEN
> G_OUTNAM := TABLE_OUT;
> ELSE
> G_OUTNAM := REPLACE(NLS_UPPER(TABLE_OUT), '"');
> END IF;
> G_OUTNAM_NQ := REPLACE(G_OUTNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_IN) ) THEN
> G_COLNAM := COLUMN_IN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(COLUMN_IN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
436,438c464,467
< TABLE_IN,
< COLUMN_IN,
< NDIM, SOURCE_SRID);
---
> G_TABNAM,
> G_COLNAM,
> NDIM,
> SOURCE_SRID);
441c470,480
< EXECUTE IMMEDIATE 'create table ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(TABLE_OUT) || ' as select rowid mdsys.sdo_rowid, sdo_cs.reassign_srid(' || SYS.DBMS_ASSERT.ENQUOTE_NAME(COLUMN_IN) || ', ' || TO_SRID || ') geometry from ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(TABLE_IN);
---
>
> STMT := 'create table ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(G_OUTNAM_NQ) ||
> ' as select rowid sdo_rowid, sdo_cs.reassign_srid(' ||
> SYS.DBMS_ASSERT.ENQUOTE_NAME(G_COLNAM_NQ) || ', ' ||
> TO_SRID || ') geometry ' ||
> 'from ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(G_TABNAM_NQ);
> BEGIN
> EXECUTE IMMEDIATE STMT;
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
466,468c505,507
< TABLE_IN,
< COLUMN_IN,
< TABLE_OUT,
---
> G_TABNAM,
> G_COLNAM,
> G_OUTNAM,
473a513
>
484a525,528
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
487a532,545
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_IN) ) THEN
> G_TABNAM := TABLE_IN;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(TABLE_IN), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_IN) ) THEN
> G_COLNAM := COLUMN_IN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(COLUMN_IN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
491,493c549,552
< TABLE_IN,
< COLUMN_IN,
< NDIM, SOURCE_SRID);
---
> G_TABNAM,
> G_COLNAM,
> NDIM,
> SOURCE_SRID);
847,850c906,916
< COMMIT_INTERVAL IN NUMBER DEFAULT -1) IS
< NDIM NUMBER;
< SOURCE_SRID NUMBER;
< POS NUMBER;
---
> COMMIT_INTERVAL IN NUMBER DEFAULT -1)
> IS
> NDIM NUMBER;
> SOURCE_SRID NUMBER;
> POS NUMBER;
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
> G_TABOUT VARCHAR2(130);
> G_TABOUT_NQ VARCHAR2(130);
853a920,940
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_IN) ) THEN
> G_TABNAM := TABLE_IN;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(TABLE_IN), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_IN) ) THEN
> G_COLNAM := COLUMN_IN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(COLUMN_IN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_OUT) ) THEN
> G_TABOUT := TABLE_OUT;
> ELSE
> G_TABOUT := REPLACE(NLS_UPPER(TABLE_OUT), '"');
> END IF;
> G_TABOUT_NQ := REPLACE(G_TABOUT, '"');
>
857,859c944,947
< TABLE_IN,
< COLUMN_IN,
< NDIM, SOURCE_SRID);
---
> G_TABNAM,
> G_COLNAM,
> NDIM,
> SOURCE_SRID);
896,898c984,986
< TABLE_IN,
< COLUMN_IN,
< TABLE_OUT,
---
> G_TABNAM_NQ,
> G_COLNAM_NQ,
> G_TABOUT_NQ,
911,913c999,1008
< COMMIT_INTERVAL IN NUMBER DEFAULT -1) IS
< NDIM NUMBER;
< SOURCE_SRID NUMBER;
---
> COMMIT_INTERVAL IN NUMBER DEFAULT -1)
> IS
> NDIM NUMBER;
> SOURCE_SRID NUMBER;
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
> G_TABOUT VARCHAR2(130);
> G_TABOUT_NQ VARCHAR2(130);
916a1012,1032
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_IN) ) THEN
> G_TABNAM := TABLE_IN;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(TABLE_IN), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_IN) ) THEN
> G_COLNAM := COLUMN_IN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(COLUMN_IN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_OUT) ) THEN
> G_TABOUT := TABLE_OUT;
> ELSE
> G_TABOUT := REPLACE(NLS_UPPER(TABLE_OUT), '"');
> END IF;
> G_TABOUT_NQ := REPLACE(G_TABOUT, '"');
>
920,922c1036,1039
< TABLE_IN,
< COLUMN_IN,
< NDIM, SOURCE_SRID);
---
> G_TABNAM,
> G_COLNAM,
> NDIM,
> SOURCE_SRID);
944,946c1061,1063
< TABLE_IN,
< COLUMN_IN,
< TABLE_OUT,
---
> G_TABNAM_NQ,
> G_COLNAM_NQ,
> G_TABOUT_NQ,
3453c3570
< <epsg:GridFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epsg="http://www.oracle.com/2004/spatial/epsg/gridfile/schema" creation="2004-08-05T15:45:00" update="2004-08-05T15:45:00">
---
> <epsg:GridFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epsg="http://www.oracle.com/2004/spatial/epsg/gridfile/schema" creation="2004-08-05T15:45:00" update="2004-08-05T15:45:00">
3521c3638
< </epsg:GridFile>';
---
> </epsg:GridFile>';
6462a6580,6583
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
6471a6593,6606
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_IN) ) THEN
> G_TABNAM := TABLE_IN;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(TABLE_IN), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_IN) ) THEN
> G_COLNAM := COLUMN_IN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(COLUMN_IN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
6475,6477c6610,6613
< TABLE_IN,
< COLUMN_IN,
< NDIM, FROM_SRID);
---
> G_TABNAM,
> G_COLNAM,
> NDIM,
> FROM_SRID);
279c279
< RTN_LIST := '(';
---
> RTN_LIST := '(';
436,437c436,437
< RETURN 'NULL' ;
< END IF ;
---
> RETURN 'NULL';
> END IF;
489c489,491
< IF ( KIND <> 'ENGINEERING' ) THEN
---
>
>
> IF ( KIND <> 'ENGINEERING' ) AND ( KIND <> 'PROJECTED' ) THEN
520,521c522,523
< RETURN 'NULL' ;
< END IF ;
---
> RETURN 'NULL';
> END IF;
568,569c570,571
< RETURN 'NULL' ;
< END IF ;
---
> RETURN 'NULL';
> END IF;
665c667,669
< IF ( KIND <> 'ENGINEERING' ) THEN
---
>
>
> IF ( KIND <> 'ENGINEERING' ) AND ( KIND <> 'PROJECTED' ) THEN
743,744c747,748
< RETURN 'NULL' ;
< END IF ;
---
> RETURN 'NULL';
> END IF;
1142,1147c1146,1151
< FOR CNT IN 1 .. DIM_1.COUNT LOOP
< DIM_1(CNT).SDO_TOLERANCE := DIM_1(CNT).SDO_TOLERANCE/10.0;
< END LOOP;
< FOR CNT IN 1 .. DIM_2.COUNT LOOP
< DIM_2(CNT).SDO_TOLERANCE := DIM_2(CNT).SDO_TOLERANCE/10.0;
< END LOOP;
---
> FOR CNT IN 1 .. DIM_1.COUNT LOOP
> DIM_1(CNT).SDO_TOLERANCE := DIM_1(CNT).SDO_TOLERANCE/10.0;
> END LOOP;
> FOR CNT IN 1 .. DIM_2.COUNT LOOP
> DIM_2(CNT).SDO_TOLERANCE := DIM_2(CNT).SDO_TOLERANCE/10.0;
> END LOOP;
1149c1153
< EXIT;
---
> EXIT;
3462c3466
< RAISE;
---
> RAISE;
3510c3514
< RAISE;
---
> RAISE;
3556c3560
< RAISE;
---
> RAISE;
3605c3609
< RAISE;
---
> RAISE;
3652c3656
< RAISE;
---
> RAISE;
3690c3694
< RAISE;
---
> RAISE;
3842c3846
< RAISE;
---
> RAISE;
3891c3895
< RAISE;
---
> RAISE;
3993c3997,3998
< PROCEDURE VALIDATE_LAYER(LAYER IN VARCHAR2, RESULT_TABLE IN VARCHAR2)
---
> PROCEDURE VALIDATE_LAYER(LAYER IN VARCHAR2,
> RESULT_TABLE IN VARCHAR2)
3997,3998c4002,4008
< QUERY_STR VARCHAR2(4000) ;
< UPDATE_STR VARCHAR2(256) ;
---
> QUERY_STR VARCHAR2(4000);
> UPDATE_STR VARCHAR2(256);
> TABNAM VARCHAR2(130);
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_RESNAM VARCHAR2(130);
> G_RESNAM_NQ VARCHAR2(130);
4001,4002c4011,4012
< QUERY_CRS CURSOR_TYPE ;
<
---
> QUERY_CRS CURSOR_TYPE;
>
4011a4022,4028
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(RESULT_TABLE) ) THEN
> G_RESNAM := RESULT_TABLE;
> ELSE
> G_RESNAM := REPLACE(NLS_UPPER(RESULT_TABLE), '"');
> END IF;
> G_RESNAM_NQ := REPLACE(G_RESNAM, '"');
4014,4018c4031,4034
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(LAYER) || '_SDOGEOM' ;
< UPDATE_STR := 'INSERT INTO ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE))
< || ' VALUES(:gid, :gid_result)' ;
<
---
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(LAYER) || '_SDOGEOM';
> UPDATE_STR := 'INSERT INTO ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' VALUES(:gid, :gid_result)';
>
4020c4036
< OPEN QUERY_CRS FOR QUERY_STR ;
---
> OPEN QUERY_CRS FOR QUERY_STR;
4023c4039
< CLOSE QUERY_CRS ;
---
> CLOSE QUERY_CRS;
4027a4044,4051
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(LAYER) ) THEN
> G_TABNAM := LAYER;
> ELSE
>
> G_TABNAM := REPLACE(NLS_UPPER(LAYER), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
4031,4033c4055,4056
< FETCH QUERY_CRS INTO GID ;
<
< EXIT WHEN QUERY_CRS%NOTFOUND ;
---
> FETCH QUERY_CRS INTO GID;
> EXIT WHEN QUERY_CRS%NOTFOUND;
4035,4036c4058,4059
< GID_RESULT := MDSYS.MD2.VALIDATE_GEOM(NLS_UPPER(
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(LAYER) ), GID, NULL);
---
> GID_RESULT :=
> MDSYS.MD2.VALIDATE_GEOM(SDO_UTIL.SET_QUOTED_NAME(G_TABNAM_NQ), GID, NULL);
4038c4061
< EXECUTE IMMEDIATE UPDATE_STR USING GID, GID_RESULT ;
---
> EXECUTE IMMEDIATE UPDATE_STR USING GID, GID_RESULT;
4045,4046c4068,4069
< END LOOP ;
< CLOSE QUERY_CRS ;
---
> END LOOP;
> CLOSE QUERY_CRS;
4058,4059c4081,4084
< PROCEDURE VALIDATE_LAYER(GEOM_TABLE IN VARCHAR2, GEOM_COLUMN IN VARCHAR2,
< PKEY_COLUMN IN VARCHAR2, RESULT_TABLE IN VARCHAR2,
---
> PROCEDURE VALIDATE_LAYER(GEOM_TABLE IN VARCHAR2,
> GEOM_COLUMN IN VARCHAR2,
> PKEY_COLUMN IN VARCHAR2,
> RESULT_TABLE IN VARCHAR2,
4065,4070c4090,4095
< THEDIMINFO MDSYS.SDO_DIM_ARRAY ;
< QUERY_STR VARCHAR2(4000) ;
< QUERY_STR2 VARCHAR2(4000) ;
< UPDATE_STR VARCHAR2(256) ;
< UPDATE_COMMIT VARCHAR2(256) ;
< INSERT_COMMIT VARCHAR2(256) ;
---
> THEDIMINFO MDSYS.SDO_DIM_ARRAY;
> QUERY_STR VARCHAR2(4000);
> QUERY_STR2 VARCHAR2(4000);
> UPDATE_STR VARCHAR2(256);
> UPDATE_COMMIT VARCHAR2(256);
> INSERT_COMMIT VARCHAR2(256);
4081c4106
< QUERY_CRS CURSOR_TYPE ;
---
> QUERY_CRS CURSOR_TYPE;
4083a4109,4114
> G_RESNAM VARCHAR2(130);
> G_RESNAM_NQ VARCHAR2(130);
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
4097a4129,4149
> IF ( SDO_UTIL.IS_BUMPY_CASE(RESULT_TABLE) ) THEN
> G_RESNAM := RESULT_TABLE;
> ELSE
> G_RESNAM := REPLACE(NLS_UPPER(RESULT_TABLE), '"');
> END IF;
> G_RESNAM_NQ := REPLACE(G_RESNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(GEOM_TABLE) ) THEN
> G_TABNAM := GEOM_TABLE;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(GEOM_TABLE), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(GEOM_COLUMN) ) THEN
> G_COLNAM := GEOM_COLUMN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(GEOM_COLUMN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
4100,4101c4152,4156
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_COLUMN) || ' FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_TABLE) || ' T ';
---
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM) || ' FROM ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM) || ' T ';
>
> UPDATE_STR := 'INSERT INTO ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' VALUES (:gid, :gid_result)';
4103,4121c4158,4172
< UPDATE_STR := 'INSERT INTO ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' VALUES (:gid, :gid_result)';
<
< INSERT_COMMIT := 'INSERT INTO ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' VALUES (NULL, ''DONE'')';
<
< QUERY_STR2 := 'SELECT COLUMN_NAME FROM SYS.USER_TAB_COLUMNS' ||
< ' WHERE TABLE_NAME = :tab ' ||
< ' AND DATA_TYPE=''VARCHAR2'' ';
< EXECUTE IMMEDIATE QUERY_STR2 INTO COL_NAME
< USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE);
<
< UPDATE_COMMIT := 'UPDATE ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' SET ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(PKEY_COLUMN) || ' = :gid ' ||
< ' WHERE '||
---
> INSERT_COMMIT := 'INSERT INTO ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' VALUES (NULL, ''DONE'')';
>
> QUERY_STR2 := 'SELECT COLUMN_NAME ' ||
> 'FROM SYS.USER_TAB_COLUMNS ' ||
> 'WHERE TABLE_NAME = :tab ' ||
> 'AND DATA_TYPE = ''VARCHAR2'' ';
> EXECUTE IMMEDIATE QUERY_STR2
> INTO COL_NAME
> USING SYS.DBMS_ASSERT.NOOP(G_RESNAM_NQ);
>
> UPDATE_COMMIT := 'UPDATE ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' SET ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(PKEY_COLUMN) || ' = :gid ' ||
> ' WHERE '||
4138,4139c4189,4190
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_TABLE),
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_COLUMN),
---
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM),
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM),
4159c4210
< MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13223, GEOM_TABLE||'.'||GEOM_COLUMN);
---
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13223, GEOM_TABLE||'.'||GEOM_COLUMN);
4162,4164c4213,4215
< MDSYS.SDO_MEMORY.END_MEMORY_CHECK;
< RAISE;
< END ;
---
> MDSYS.SDO_MEMORY.END_MEMORY_CHECK;
> RAISE;
> END;
4170c4221
< OPEN QUERY_CRS FOR QUERY_STR ;
---
> OPEN QUERY_CRS FOR QUERY_STR;
4180,4181c4231
< STMT := 'truncate table ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE));
---
> STMT := 'truncate table ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ);
4182a4233
>
4186,4191c4237,4241
< FETCH QUERY_CRS INTO GID, THEGEOMETRY ;
< EXCEPTION
<
< WHEN INVALID_NUMBER THEN
< CLOSE QUERY_CRS ;
< MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13265, GEOM_COLUMN, GEOM_TABLE);
---
> FETCH QUERY_CRS INTO GID, THEGEOMETRY;
> EXCEPTION
> WHEN INVALID_NUMBER THEN
> CLOSE QUERY_CRS;
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13265, GEOM_COLUMN, GEOM_TABLE);
4193,4195c4243,4245
< WHEN INVALID_DATATYPE THEN
< CLOSE QUERY_CRS ;
< MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13263, GEOM_COLUMN, GEOM_TABLE);
---
> WHEN INVALID_DATATYPE THEN
> CLOSE QUERY_CRS;
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13263, GEOM_COLUMN, GEOM_TABLE);
4197,4201c4247,4251
< WHEN OTHERS THEN
< CLOSE QUERY_CRS;
< MDSYS.SDO_MEMORY.END_MEMORY_CHECK;
< RAISE;
< END ;
---
> WHEN OTHERS THEN
> CLOSE QUERY_CRS;
> MDSYS.SDO_MEMORY.END_MEMORY_CHECK;
> RAISE;
> END;
4203c4253
< EXIT WHEN QUERY_CRS%NOTFOUND ;
---
> EXIT WHEN QUERY_CRS%NOTFOUND;
4207c4257
<
---
>
4249c4299
< EXECUTE IMMEDIATE UPDATE_STR USING GID, GID_RESULT ;
---
> EXECUTE IMMEDIATE UPDATE_STR USING GID, GID_RESULT;
4251,4252c4301,4302
< END LOOP ;
< CLOSE QUERY_CRS ;
---
> END LOOP;
> CLOSE QUERY_CRS;
4274c4324,4330
< G_TABLE VARCHAR2(130);
---
> G_RESNAM VARCHAR2(130);
> G_RESNAM_NQ VARCHAR2(130);
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
> STMT VARCHAR2(4000);
4303,4304c4359,4363
< USER_NAME := SDO_UTIL.GET_QUOTED_NAME(SUBSTR(GEOM_TABLE, 1, INSTR(GEOM_TABLE, '.')-1));
< G_TABLE := NLS_UPPER(SUBSTR(GEOM_TABLE, INSTR(GEOM_TABLE, '.')+1));
---
> USER_NAME := NLS_UPPER(SUBSTR(GEOM_TABLE, 1, INSTR(GEOM_TABLE, '.')-1));
> G_TABNAM := SUBSTR(GEOM_TABLE, INSTR(GEOM_TABLE, '.')+1);
> IF ( NOT SDO_UTIL.IS_BUMPY_CASE(G_TABNAM) ) THEN
> G_TABNAM := REPLACE(NLS_UPPER(G_TABNAM), '"');
> END IF;
4313c4372,4376
< G_TABLE := GEOM_TABLE;
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(GEOM_TABLE) ) THEN
> G_TABNAM := GEOM_TABLE;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(GEOM_TABLE), '"');
> END IF;
4315c4378,4393
<
---
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(GEOM_COLUMN) ) THEN
> G_COLNAM := GEOM_COLUMN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(GEOM_COLUMN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(RESULT_TABLE) ) THEN
> G_RESNAM := RESULT_TABLE;
> ELSE
> G_RESNAM := REPLACE(NLS_UPPER(RESULT_TABLE), '"');
> END IF;
> G_RESNAM_NQ := REPLACE(G_RESNAM, '"');
>
4317,4319c4395,4400
< SELECT COUNT(*) INTO CNT
< FROM SYS.USER_TAB_COLUMNS
< WHERE TABLE_NAME = NLS_UPPER(RESULT_TABLE) AND DATA_TYPE='VARCHAR2';
---
> STMT := 'SELECT count(*) ' ||
> 'FROM SYS.USER_TAB_COLUMNS ' ||
> 'WHERE TABLE_NAME = :tab ' ||
> 'AND DATA_TYPE = ''VARCHAR2'' ';
> EXECUTE IMMEDIATE STMT INTO CNT
> USING G_RESNAM_NQ;
4327,4329c4408,4413
< SELECT COUNT(*) INTO CNT
< FROM SYS.ALL_TAB_COLS
< WHERE TABLE_NAME = NLS_UPPER(G_TABLE) AND OWNER = USER_NAME ;
---
> STMT := 'SELECT count(*) ' ||
> 'FROM SYS.ALL_TAB_COLS ' ||
> 'WHERE OWNER = :own ' ||
> 'AND TABLE_NAME = :tab';
> EXECUTE IMMEDIATE STMT INTO CNT
> USING USER_NAME, G_TABNAM_NQ;
4337,4343c4421,4430
< SELECT COLUMN_NAME INTO COLUMN_NAME
< FROM SYS.USER_TAB_COLUMNS
< WHERE TABLE_NAME = NLS_UPPER(RESULT_TABLE) AND DATA_TYPE='VARCHAR2';
<
< EXECUTE IMMEDIATE 'truncate table ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE));
<
---
> STMT := 'SELECT COLUMN_NAME ' ||
> 'FROM SYS.USER_TAB_COLUMNS ' ||
> 'WHERE TABLE_NAME = :tab ' ||
> 'AND DATA_TYPE = ''VARCHAR2'' ';
> EXECUTE IMMEDIATE STMT INTO COLUMN_NAME
> USING G_RESNAM_NQ;
>
> STMT := 'truncate table ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ);
> EXECUTE IMMEDIATE STMT;
>
4347,4348c4434,4435
< G_TABLE,
< GEOM_COLUMN,
---
> G_TABNAM,
> G_COLNAM,
4368c4455,4456
< FULL_TABLE := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER_NAME) || '.' || NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABLE));
---
> FULL_TABLE := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER_NAME) || '.' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM);
4371,4375c4459,4465
< EXECUTE IMMEDIATE
< 'select '||
< NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_COLUMN)) ||' from '||
< FULL_TABLE || ' where :1 is not null and rownum < 2 '
< INTO SAMPLE_GEOMETRY USING NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_COLUMN));
---
> STMT := 'select ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM) ||
> ' from ' || FULL_TABLE ||
> ' where ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM) ||
> ' is not null and rownum < 2';
> EXECUTE IMMEDIATE STMT INTO SAMPLE_GEOMETRY;
4416,4419c4506,4510
< FULL_TABLE,
< NLS_UPPER(GEOM_COLUMN),NLS_UPPER(RESULT_TABLE), COMMIT_INTERVAL,
< CONDITIONAL, CHCK3DSRID,
< SM_MJR_AXIS, 1.0/INV_FLTN, G3D_GEOG_CRS_UOM_FACTOR, IS_UNIT_RADIANS, DIMINFO(1).SDO_TOLERANCE);
---
> FULL_TABLE,
> G_COLNAM, G_RESNAM_NQ, COMMIT_INTERVAL,
> CONDITIONAL, CHCK3DSRID,
> SM_MJR_AXIS, 1.0/INV_FLTN, G3D_GEOG_CRS_UOM_FACTOR,
> IS_UNIT_RADIANS, DIMINFO(1).SDO_TOLERANCE);
4424,4426c4515,4517
< EXECUTE IMMEDIATE 'insert into ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' values(NULL, ''0'') ';
---
> STMT := 'INSERT INTO ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' VALUES(NULL, ''0'')';
> EXECUTE IMMEDIATE STMT;
4428,4431c4519,4521
< EXECUTE IMMEDIATE ' select rowid from ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE))
< INTO TAB_ROWID;
<
---
> STMT := 'select rowid from ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ);
> EXECUTE IMMEDIATE STMT
> INTO TAB_ROWID;
4433c4523
< SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT(NLS_UPPER(G_TABLE),NLS_UPPER(GEOM_COLUMN),
---
> SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT(G_TABNAM, G_COLNAM,
4435c4525
< NLS_UPPER(RESULT_TABLE), COMMIT_INTERVAL,
---
> G_RESNAM, COMMIT_INTERVAL,
4437,4438c4527,4528
< SYS.ODCICOLINFOLIST(SYS.ODCICOLINFO(USER_NAME,NLS_UPPER(G_TABLE),
< NLS_UPPER(GEOM_COLUMN),
---
> SYS.ODCICOLINFOLIST(SYS.ODCICOLINFO(USER_NAME, G_TABNAM,
> G_COLNAM,
4444,4445c4534,4535
< VALLAYER_WITH_CONTEXT_LRS(NLS_UPPER(GEOM_TABLE),
< NLS_UPPER(GEOM_COLUMN),
---
> VALLAYER_WITH_CONTEXT_LRS(G_TABNAM,
> G_COLNAM,
4447c4537
< NLS_UPPER(RESULT_TABLE),
---
> G_RESNAM,
4452,4460c4542,4546
< SELECT
< COUNT(*)
< INTO
< HAS_WKT
< FROM
< CS_SRS CRS
< WHERE
< CRS.SRID = VALIDATE_LAYER_WITH_CONTEXT.SRID AND
< NOT(WKTEXT IS NULL);
---
> SELECT COUNT(*)
> INTO HAS_WKT
> FROM CS_SRS CRS
> WHERE CRS.SRID = VALIDATE_LAYER_WITH_CONTEXT.SRID
> AND NOT(WKTEXT IS NULL);
4482,4487c4568,4571
< THEDIMINFO MDSYS.SDO_DIM_ARRAY ;
< QUERY_STR VARCHAR2(4000) ;
< QUERY_STR2 VARCHAR2(4000) ;
< UPDATE_STR VARCHAR2(4000) ;
< UPDATE_COMMIT VARCHAR2(256) ;
< INSERT_COMMIT VARCHAR2(256) ;
---
> THEDIMINFO MDSYS.SDO_DIM_ARRAY;
> QUERY_STR VARCHAR2(4000);
> QUERY_STR2 VARCHAR2(4000);
> UPDATE_STR VARCHAR2(4000);
4497c4581
< QUERY_CRS CURSOR_TYPE ;
---
> QUERY_CRS CURSOR_TYPE;
4503a4588,4593
> G_RESNAM VARCHAR2(130);
> G_RESNAM_NQ VARCHAR2(130);
> G_TABNAM VARCHAR2(130);
> G_TABNAM_NQ VARCHAR2(130);
> G_COLNAM VARCHAR2(1024);
> G_COLNAM_NQ VARCHAR2(1024);
4515a4606,4626
> IF ( SDO_UTIL.IS_BUMPY_CASE(RESULT_TABLE) ) THEN
> G_RESNAM := RESULT_TABLE;
> ELSE
> G_RESNAM := REPLACE(NLS_UPPER(RESULT_TABLE), '"');
> END IF;
> G_RESNAM_NQ := REPLACE(G_RESNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(GEOM_TABLE) ) THEN
> G_TABNAM := GEOM_TABLE;
> ELSE
> G_TABNAM := REPLACE(NLS_UPPER(GEOM_TABLE), '"');
> END IF;
> G_TABNAM_NQ := REPLACE(G_TABNAM, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(GEOM_COLUMN) ) THEN
> G_COLNAM := GEOM_COLUMN;
> ELSE
> G_COLNAM := REPLACE(NLS_UPPER(GEOM_COLUMN), '"');
> END IF;
> G_COLNAM_NQ := REPLACE(G_COLNAM, '"');
>
4518,4519c4629,4633
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_COLUMN) || ' FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_TABLE) || ' T ';
---
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM) || ' FROM ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM) || ' T ';
>
> UPDATE_STR := 'INSERT INTO ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' VALUES (:gid, :gid_result)';
4521,4528d4634
< UPDATE_STR := 'INSERT INTO ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' VALUES (:gid, :gid_result)';
<
< INSERT_COMMIT := 'INSERT INTO ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' VALUES (NULL, ''DONE'')';
<
4533,4534c4639,4640
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_TABLE),
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOM_COLUMN),
---
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM),
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM),
4551,4552c4657,4658
< RAISE ;
< END ;
---
> RAISE;
> END;
4558c4664
< OPEN QUERY_CRS FOR QUERY_STR ;
---
> OPEN QUERY_CRS FOR QUERY_STR;
4560,4562c4666,4668
< WHEN TABLE_DOES_NOT_EXIST THEN
< CLOSE QUERY_CRS;
< MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13261, GEOM_TABLE);
---
> WHEN TABLE_DOES_NOT_EXIST THEN
> CLOSE QUERY_CRS;
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13261, GEOM_TABLE);
4568c4674
< FETCH QUERY_CRS INTO GID, THEGEOMETRY ;
---
> FETCH QUERY_CRS INTO GID, THEGEOMETRY;
4572,4573c4678,4679
< CLOSE QUERY_CRS ;
< MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13265, GEOM_COLUMN, GEOM_TABLE);
---
> CLOSE QUERY_CRS;
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13265, GEOM_COLUMN, GEOM_TABLE);
4576,4577c4682,4683
< CLOSE QUERY_CRS ;
< MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13263, GEOM_COLUMN, GEOM_TABLE);
---
> CLOSE QUERY_CRS;
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', 13263, GEOM_COLUMN, GEOM_TABLE);
4580,4582c4686,4688
< CLOSE QUERY_CRS ;
< RAISE ;
< END ;
---
> CLOSE QUERY_CRS;
> RAISE;
> END;
4584c4690
< EXIT WHEN QUERY_CRS%NOTFOUND ;
---
> EXIT WHEN QUERY_CRS%NOTFOUND;
4634c4740
< EXECUTE IMMEDIATE UPDATE_STR USING GID, GID_RESULT ;
---
> EXECUTE IMMEDIATE UPDATE_STR USING GID, GID_RESULT;
4643,4644c4749,4750
< END LOOP ;
< CLOSE QUERY_CRS ;
---
> END LOOP;
> CLOSE QUERY_CRS;
4648,4650c4754,4755
< ROW_COUNT_INSERT := 'INSERT INTO ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(RESULT_TABLE)) ||
< ' VALUES (NULL, :str1) ';
---
> ROW_COUNT_INSERT := 'INSERT INTO ' || SDO_UTIL.SET_QUOTED_NAME(G_RESNAM_NQ) ||
> ' VALUES (NULL, :str1) ';
4656c4761
< RAISE ;
---
> RAISE;
4683d4787
<
4687d4790
<
4281c4281 < IF ISNODATAMASK IS NOT NULL AND UPPER(ISNODATAMASK) = 'TRUE' THEN --- > IF ISNODATAMASK IS NOT NULL AND NLS_UPPER(ISNODATAMASK) = 'TRUE' THEN 6855c6855 < IF((NODATA IS NOT NULL)AND(UPPER(NODATA)='TRUE')) --- > IF((NODATA IS NOT NULL)AND(NLS_UPPER(NODATA)='TRUE')) 6918c6918 < IF((MLOCATION IS NOT NULL)AND(UPPER(MLOCATION)='UPPERLEFT')) --- > IF((MLOCATION IS NOT NULL)AND(NLS_UPPER(MLOCATION)='UPPERLEFT')) 6995c6995 < IF((MLOCATION IS NOT NULL)AND(UPPER(MLOCATION)='UPPERLEFT')) --- > IF((MLOCATION IS NOT NULL)AND(NLS_UPPER(MLOCATION)='UPPERLEFT'))
48c48 < PARAM := UPPER(SUBSTR(MOSAICPARAM, 1, 1000)); --- > PARAM := NLS_UPPER(SUBSTR(MOSAICPARAM, 1, 1000)); 972c972 < IDX := INSTR(UPPER(RESUNIT), 'UNIT'); --- > IDX := INSTR(NLS_UPPER(RESUNIT), 'UNIT'); 998c998 < WHERE UPPER(UNIT_OF_MEAS_NAME) = UPPER(RESUNIT) --- > WHERE NLS_UPPER(UNIT_OF_MEAS_NAME) = NLS_UPPER(RESUNIT)
115a116 > 0, 204a206 > 0, 256a259,350 > ENDIAN_FLAG IN VARCHAR2) IS > BEGIN > TTS_INDEX_INITIALIZE( > SCHEMA_NAME, > SDO_INDEX_TYPE, > SDO_LEVEL, > SDO_NUMTILES, > SDO_MAXLEVEL, > SDO_COMMIT_INTERVAL, > SDO_INDEX_TABLE, > SDO_INDEX_NAME, > SDO_INDEX_PRIMARY, > SDO_TSNAME, > SDO_COLUMN_NAME, > SDO_RTREE_HEIGHT, > SDO_RTREE_NUM_NODES, > SDO_RTREE_DIMENSIONALITY, > SDO_RTREE_FANOUT, > SDO_RTREE_ROOT, > SDO_RTREE_SEQ_NAME, > SDO_FIXED_META, > SDO_TABLESPACE, > SDO_INITIAL_EXTENT, > SDO_NEXT_EXTENT, > SDO_PCTINCREASE, > SDO_MIN_EXTENTS, > SDO_MAX_EXTENTS, > SDO_INDEX_DIMS, > SDO_LAYER_GTYPE, > SDO_RTREE_PCTFREE, > SDO_INDEX_PARTITION, > SDO_PARTITIONED, > SDO_RTREE_QUALITY, > SDO_INDEX_VERSION, > SDO_INDEX_GEODETIC, > SDO_INDEX_STATUS, > SDO_NL_INDEX_TABLE, > SDO_DML_BATCH_SIZE, > 0, > SDO_RTREE_ENT_XPND, > NULL, > 0, > 0, > NULL, > SDO_ROOT_MBR, > ENDIAN_FLAG); > END; > > > PROCEDURE TTS_INDEX_INITIALIZE( > SCHEMA_NAME IN VARCHAR2, > SDO_INDEX_TYPE IN VARCHAR2, > SDO_LEVEL IN NUMBER, > SDO_NUMTILES IN NUMBER, > SDO_MAXLEVEL IN NUMBER, > SDO_COMMIT_INTERVAL IN NUMBER, > SDO_INDEX_TABLE IN VARCHAR2, > SDO_INDEX_NAME IN VARCHAR2, > SDO_INDEX_PRIMARY IN NUMBER, > SDO_TSNAME IN VARCHAR2, > SDO_COLUMN_NAME IN VARCHAR2, > SDO_RTREE_HEIGHT IN NUMBER, > SDO_RTREE_NUM_NODES IN NUMBER, > SDO_RTREE_DIMENSIONALITY IN NUMBER, > SDO_RTREE_FANOUT IN NUMBER, > SDO_RTREE_ROOT IN VARCHAR2, > SDO_RTREE_SEQ_NAME IN VARCHAR2, > SDO_FIXED_META IN RAW, > SDO_TABLESPACE IN VARCHAR2, > SDO_INITIAL_EXTENT IN VARCHAR2, > SDO_NEXT_EXTENT IN VARCHAR2, > SDO_PCTINCREASE IN NUMBER, > SDO_MIN_EXTENTS IN NUMBER, > SDO_MAX_EXTENTS IN NUMBER, > SDO_INDEX_DIMS IN NUMBER, > SDO_LAYER_GTYPE IN VARCHAR2, > SDO_RTREE_PCTFREE IN NUMBER, > SDO_INDEX_PARTITION IN VARCHAR2, > SDO_PARTITIONED IN NUMBER, > SDO_RTREE_QUALITY IN NUMBER, > SDO_INDEX_VERSION IN NUMBER, > SDO_INDEX_GEODETIC IN VARCHAR2, > SDO_INDEX_STATUS IN VARCHAR2, > SDO_NL_INDEX_TABLE IN VARCHAR2, > SDO_DML_BATCH_SIZE IN NUMBER, > SDO_RTREE_READ_ONLY IN NUMBER, > SDO_RTREE_ENT_XPND IN NUMBER, > SDO_INDEX_OID IN VARCHAR2, > SDO_NUM_ROWS IN NUMBER, > SDO_NUM_BLKS IN NUMBER, > SDO_TABLE_NAME IN VARCHAR2, > SDO_ROOT_MBR IN MDSYS.SDO_GEOMETRY, 301c395 < EXECUTE IMMEDIATE 'SELECT sdo_util.check_endian(:sch, :tab, :root) from dual' --- > EXECUTE IMMEDIATE 'SELECT sdo_util.check_endian(:sch, :tab, :root) from sys.dual' 351a446 > SDO_RTREE_READ_ONLY,
2a3
>
9,10c10,18
< TABLE_NAME VARCHAR2(130) := NLS_UPPER(NEW_TABLE_NAME);
< COLUMN_NAME VARCHAR2(1024) := NLS_UPPER(NEW_COLUMN_NAME);
---
> STMT VARCHAR2(4000);
>
>
>
>
>
>
> TABLE_NAME VARCHAR2(130);
> COLUMN_NAME VARCHAR2(1024);
12,16c20,65
< SELECT COUNT(*) INTO DATA_EXISTS
< FROM MDSYS.SDO_GEOM_METADATA_TABLE
< WHERE SDO_OWNER = OWNER
< AND SDO_TABLE_NAME = TABLE_NAME
< AND SDO_COLUMN_NAME = COLUMN_NAME;
---
>
> IF ( OWNER IS NULL ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Owner cannot be NULL');
> END IF;
>
>
>
>
> IF ( NEW_TABLE_NAME IS NULL ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Table name cannot be NULL');
> END IF;
>
>
>
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(NEW_TABLE_NAME) ) THEN
> TABLE_NAME := NEW_TABLE_NAME;
> ELSE
>
> TABLE_NAME := REPLACE(NLS_UPPER(NEW_TABLE_NAME), '"');
> END IF;
>
>
> IF ( NEW_COLUMN_NAME IS NULL ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Column name cannot be NULL');
> END IF;
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(NEW_COLUMN_NAME) ) THEN
> COLUMN_NAME := NEW_COLUMN_NAME;
> ELSIF (INSTRB(NEW_COLUMN_NAME, 'JSON_VALUE(') > 0) THEN
> COLUMN_NAME := NEW_COLUMN_NAME;
> ELSE
>
> COLUMN_NAME := REPLACE(NLS_UPPER(NEW_COLUMN_NAME), '"');
> END IF;
>
> STMT := 'SELECT count(*) ' ||
> 'FROM MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'WHERE sdo_owner = :own ' ||
> 'AND sdo_table_name = :tab ' ||
> 'AND sdo_column_name = :col';
> EXECUTE IMMEDIATE STMT INTO DATA_EXISTS
> USING OWNER, TABLE_NAME, COLUMN_NAME;
19,20c68,71
< INSERT INTO MDSYS.SDO_GEOM_METADATA_TABLE
< VALUES (OWNER, TABLE_NAME, COLUMN_NAME, DIMINFO, SRID);
---
> STMT := 'INSERT INTO MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'VALUES(:own, :tab, :col, :dim, :srid)';
> EXECUTE IMMEDIATE STMT
> USING OWNER, TABLE_NAME, COLUMN_NAME, DIMINFO, SRID;
23a75
>
31a84
>
37a91
>
47a102
>
53a109
>
62a119
>
68a126
>
75a134
> STMT VARCHAR2(4000);
85,92c144,154
< DELETE FROM MDSYS.SDO_GEOM_METADATA_TABLE
< WHERE SDO_OWNER = OWNER
< AND SDO_TABLE_NAME = NLS_UPPER(OLD_TABLE_NAME)
< AND SDO_COLUMN_NAME = NLS_UPPER(OLD_COLUMN_NAME);
<
< INSERT INTO MDSYS.SDO_GEOM_METADATA_TABLE
< VALUES (OWNER, NLS_UPPER(NEW_TABLE_NAME), NLS_UPPER(NEW_COLUMN_NAME),
< DIMINFO, SRID);
---
> STMT := 'DELETE FROM MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'WHERE SDO_OWNER = :own ' ||
> 'AND SDO_TABLE_NAME = :tab ' ||
> 'AND SDO_COLUMN_NAME = :col';
> EXECUTE IMMEDIATE STMT
> USING OWNER, OLD_TABLE_NAME, OLD_COLUMN_NAME;
>
> STMT := 'INSERT INTO MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'VALUES(:own, :tab, :col, :dim, :srid)';
> EXECUTE IMMEDIATE STMT
> USING OWNER, NEW_TABLE_NAME, NEW_COLUMN_NAME, DIMINFO, SRID;
123a186
> STMT VARCHAR2(4000);
129,132c192,197
< DELETE FROM MDSYS.SDO_GEOM_METADATA_TABLE
< WHERE SDO_OWNER = OWNER
< AND SDO_TABLE_NAME = OLD_TABLE_NAME
< AND SDO_COLUMN_NAME = OLD_COLUMN_NAME;
---
> STMT := 'DELETE FROM MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'WHERE SDO_OWNER = :own ' ||
> 'AND SDO_TABLE_NAME = :tab ' ||
> 'AND SDO_COLUMN_NAME = :col';
> EXECUTE IMMEDIATE STMT
> USING OWNER, OLD_TABLE_NAME, OLD_COLUMN_NAME;
136a202
> STMT VARCHAR2(4000);
143,145c209,213
< DELETE FROM MDSYS.SDO_GEOM_METADATA_TABLE
< WHERE SDO_OWNER = OWNER
< AND SDO_TABLE_NAME = OLD_TABLE_NAME;
---
> STMT := 'DELETE FROM MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'WHERE SDO_OWNER = :own ' ||
> 'AND SDO_TABLE_NAME = :tab';
> EXECUTE IMMEDIATE STMT
> USING OWNER, OLD_TABLE_NAME;
165,185c165,207
< PROCEDURE MDMIG(LAYER IN VARCHAR2, NEWTABNAME IN VARCHAR2,
< GIDCOLUMN IN VARCHAR2, GEOCOLNAME IN VARCHAR2,
< LAYER_GTYPE IN VARCHAR2, UPDATE_FLAG IN VARCHAR2) IS
< EXTERNAL
< NAME "mdmig"
< LIBRARY ORDMD_MIG_LIBS
< WITH CONTEXT
< PARAMETERS(CONTEXT, LAYER OCISTRING, NEWTABNAME OCISTRING,
< GIDCOLUMN OCISTRING, GEOCOLNAME OCISTRING,
< LAYER_GTYPE OCISTRING, UPDATE_FLAG OCISTRING);
<
<
< PROCEDURE TO_81X(LAYER IN VARCHAR2, NEWTABNAME IN VARCHAR2,
< GIDCOLUMN IN VARCHAR2, GEOCOLNAME IN VARCHAR2,
< LAYER_GTYPE IN VARCHAR2, UPDATE_FLAG IN VARCHAR2) IS
< CNT NUMBER;
< USER1 VARCHAR2(130);
< TAB1 VARCHAR2(130);
< USER2 VARCHAR2(130);
< TAB2 VARCHAR2(130);
< RES VARCHAR2(10);
---
>
>
>
>
>
>
>
>
> PROCEDURE MDMIG(LAYER IN VARCHAR2,
> NEWTABNAME IN VARCHAR2,
> GIDCOLUMN IN VARCHAR2,
> GEOCOLNAME IN VARCHAR2,
> LAYER_GTYPE IN VARCHAR2,
> UPDATE_FLAG IN VARCHAR2)
> IS
> EXTERNAL
> NAME "mdmig"
> LIBRARY ORDMD_MIG_LIBS
> WITH CONTEXT
> PARAMETERS(CONTEXT, LAYER OCISTRING, NEWTABNAME OCISTRING,
> GIDCOLUMN OCISTRING, GEOCOLNAME OCISTRING,
> LAYER_GTYPE OCISTRING, UPDATE_FLAG OCISTRING);
>
>
> PROCEDURE TO_81X(LAYER IN VARCHAR2,
> NEWTABNAME IN VARCHAR2,
> GIDCOLUMN IN VARCHAR2,
> GEOCOLNAME IN VARCHAR2,
> LAYER_GTYPE IN VARCHAR2,
> UPDATE_FLAG IN VARCHAR2)
> IS
> CNT NUMBER;
> USER1 VARCHAR2(130);
> TAB1 VARCHAR2(130);
> USER2 VARCHAR2(130);
> TAB2 VARCHAR2(130);
> RES VARCHAR2(10);
> STMT VARCHAR2(4000);
> U1 VARCHAR2(200);
> U2 VARCHAR2(200);
> D1 VARCHAR2(200);
> G1 VARCHAR2(200);
> T2 VARCHAR2(200);
191c213,217
< TAB1 := NLS_UPPER(LAYER);
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(LAYER) ) THEN
> TAB1 := LAYER;
> ELSE
> TAB1 := REPLACE(NLS_UPPER(LAYER), '"');
> END IF;
194c220,223
< TAB1 := NLS_UPPER(SUBSTR(LAYER, CNT+1));
---
> TAB1 := SUBSTR(LAYER, CNT+1);
> IF ( NOT SDO_UTIL.IS_BUMPY_CASE(TAB1) ) THEN
> TAB1 := REPLACE(NLS_UPPER(TAB1), '"');
> END IF;
208c237,241
< TAB2 := NLS_UPPER(NEWTABNAME);
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(NEWTABNAME) ) THEN
> TAB2 := NEWTABNAME;
> ELSE
> TAB2 := REPLACE(NLS_UPPER(NEWTABNAME), '"');
> END IF;
211c244,247
< TAB2 := NLS_UPPER(SUBSTR(NEWTABNAME, CNT+1));
---
> TAB2 := SUBSTR(NEWTABNAME, CNT+1);
> IF ( NOT SDO_UTIL.IS_BUMPY_CASE(TAB2) ) THEN
> TAB2 := REPLACE(NLS_UPPER(TAB2), '"');
> END IF;
213a250,255
> T2 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2);
> U2 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER2);
> D1 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(REPLACE(TAB1, '"')) || '_SDODIM';
> G1 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(REPLACE(TAB1, '"')) || '_SDOGEOM';
> U1 := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1);
>
215,223c257,267
< EXECUTE IMMEDIATE
< 'SELECT COUNT(TABLE_NAME) FROM SYS.ALL_TABLES WHERE '||
< '(TABLE_NAME= :tab2 AND OWNER= :user2) OR ' ||
< ' (TABLE_NAME= :tab1 AND OWNER= :user1) '
< INTO CNT
< USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2),
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER2),
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB1)||'_SDOGEOM',
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1);
---
> STMT := 'SELECT COUNT(TABLE_NAME) ' ||
> 'FROM SYS.ALL_TABLES ' ||
> 'WHERE (TABLE_NAME = :tab2 AND OWNER = :user2) ' ||
> 'OR (TABLE_NAME = :tab1 AND OWNER = :user1)';
> BEGIN
> EXECUTE IMMEDIATE STMT INTO CNT
> USING T2, U2, G1, U1;
>
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
226c270
< MDERR.RAISE_MD_ERROR('MD','SDO',-13108, NEWTABNAME||'_OR_'||LAYER||'_SDOGEOM');
---
> MDERR.RAISE_MD_ERROR('MD','SDO',-13108, T2 || ' _OR_ ' || G1);
234,245c278,291
< EXECUTE IMMEDIATE
< 'UPDATE '||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER2) ||'.'||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2) || ' a ' ||
< 'SET ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOCOLNAME) || ' = (SELECT ' ||
< 'MDSYS.SDO_GEOMETRY(1,NULL,MDSYS.SDO_POINT_TYPE(sdo_x1,sdo_y1,NULL),NULL,NULL)'||
< 'FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1) || '.' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB1) || '_SDOGEOM b ' ||
< 'WHERE a.' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GIDCOLUMN) ||' = b.sdo_gid)';
---
> STMT := 'UPDATE "' || U2 || '"."' || T2 || '" a ' ||
> 'SET "' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOCOLNAME) ||
> '" = (SELECT ' ||
> 'MDSYS.SDO_GEOMETRY(1,NULL,MDSYS.SDO_POINT_TYPE(sdo_x1,sdo_y1,NULL),NULL,NULL)' ||
> 'FROM "' || U1 || '"."' || G1 || '" b ' ||
> 'WHERE a.' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GIDCOLUMN) ||' = b.sdo_gid)';
> BEGIN
> EXECUTE IMMEDIATE STMT;
>
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
247,257c293,304
< EXECUTE IMMEDIATE
< 'INSERT INTO '||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER2) ||'.'||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2) ||
< '(' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GIDCOLUMN) || ',' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOCOLNAME) || ') SELECT SDO_GID,'||
< 'MDSYS.SDO_GEOMETRY(1,NULL,MDSYS.SDO_POINT_TYPE(sdo_x1,sdo_y1,NULL),NULL,NULL)'||
< 'FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1) || '.' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB1) || '_SDOGEOM';
---
> STMT := 'INSERT INTO ' || U2 || '.' || T2 || '(' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GIDCOLUMN) || ',' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOCOLNAME) || ') ' ||
> 'SELECT SDO_GID,' ||
> 'MDSYS.SDO_GEOMETRY(1,NULL,MDSYS.SDO_POINT_TYPE(sdo_x1,sdo_y1,NULL),NULL,NULL)' ||
> 'FROM ' || U1 || '.' || G1;
> BEGIN
> EXECUTE IMMEDIATE STMT;
>
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
261,262c308
< MDMIG(NLS_UPPER(LAYER), NLS_UPPER(NEWTABNAME), NLS_UPPER(GIDCOLUMN),
< NLS_UPPER(GEOCOLNAME), 'NOTPOINT', 'UPDATE');
---
> MDMIG(LAYER, NEWTABNAME, GIDCOLUMN, GEOCOLNAME, 'NOTPOINT', 'UPDATE');
264,265c310
< MDMIG(NLS_UPPER(LAYER), NLS_UPPER(NEWTABNAME), NLS_UPPER(GIDCOLUMN),
< NLS_UPPER(GEOCOLNAME), 'NOTPOINT', 'INSERT');
---
> MDMIG(LAYER, NEWTABNAME, GIDCOLUMN, GEOCOLNAME, 'NOTPOINT', 'INSERT');
270,274c315,325
< EXECUTE IMMEDIATE
< 'SELECT COUNT(TABLE_NAME) FROM MDSYS.ALL_SDO_GEOM_METADATA '||
< ' WHERE OWNER = :user2 AND TABLE_NAME= :tab2 '
< INTO CNT USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER2),
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2);
---
> STMT := 'SELECT COUNT(TABLE_NAME) ' ||
> 'FROM MDSYS.ALL_SDO_GEOM_METADATA '||
> 'WHERE OWNER = :user2 ' ||
> 'AND TABLE_NAME = :tab2';
> BEGIN
> EXECUTE IMMEDIATE STMT INTO CNT
> USING U2, T2;
>
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
277,293c328,352
< EXECUTE IMMEDIATE
< 'INSERT INTO MDSYS.USER_SDO_GEOM_METADATA VALUES (:tab2, :col, '||
< ' MDSYS.SDO_DIM_ARRAY(),NULL)'
< USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2),
< NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOCOLNAME));
<
< BEGIN
< EXECUTE IMMEDIATE
< 'UPDATE MDSYS.USER_SDO_GEOM_METADATA SET DIMINFO = '||
< '(SELECT CAST(MULTISET(SELECT MDSYS.SDO_DIM_ELEMENT(SDO_DIMNAME,'||
< 'SDO_LB, SDO_UB, SDO_TOLERANCE) FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1) || '.' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB1) ||
< '_SDODIM' ||
< ') AS MDSYS.SDO_DIM_ARRAY) FROM SYS.DUAL) WHERE ' ||
< ' TABLE_NAME = :tab '
< USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2);
---
> STMT := 'INSERT INTO MDSYS.USER_SDO_GEOM_METADATA ' ||
> 'VALUES(:tab2, :col, MDSYS.SDO_DIM_ARRAY(), NULL)';
> BEGIN
> EXECUTE IMMEDIATE STMT
> USING T2, SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(GEOCOLNAME);
>
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
> BEGIN
> STMT := 'UPDATE MDSYS.USER_SDO_GEOM_METADATA ' ||
> 'SET DIMINFO = '||
> '(SELECT CAST(MULTISET(SELECT MDSYS.SDO_DIM_ELEMENT(SDO_DIMNAME,'||
> ' SDO_LB, SDO_UB, SDO_TOLERANCE) ' ||
> ' FROM ' || U1 || '.' || D1 ||
> ') AS MDSYS.SDO_DIM_ARRAY) FROM SYS.DUAL) ' ||
> 'WHERE TABLE_NAME = :tab';
> BEGIN
> EXECUTE IMMEDIATE STMT
> USING T2;
>
> EXCEPTION WHEN OTHERS THEN
> RAISE;
> END;
>
297,306c356,366
< EXECUTE IMMEDIATE
< 'UPDATE MDSYS.USER_SDO_GEOM_METADATA SET DIMINFO = '||
< '(SELECT CAST(MULTISET(SELECT MDSYS.SDO_DIM_ELEMENT(NULL,'||
< 'SDO_LB, SDO_UB, SDO_TOLERANCE) FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1) || '.' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB1) ||
< '_SDODIM' ||
< ') AS MDSYS.SDO_DIM_ARRAY) FROM SYS.DUAL) WHERE ' ||
< ' TABLE_NAME = :tab '
< USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2);
---
> STMT := 'UPDATE MDSYS.USER_SDO_GEOM_METADATA ' ||
> 'SET DIMINFO = '||
> '(SELECT CAST(MULTISET(SELECT MDSYS.SDO_DIM_ELEMENT(NULL,'||
> ' SDO_LB, SDO_UB, SDO_TOLERANCE) ' ||
> ' FROM ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(USER1) || '.' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB1) || '_SDODIM' ||
> ') AS MDSYS.SDO_DIM_ARRAY) FROM SYS.DUAL) ' ||
> 'WHERE TABLE_NAME = :tab';
> EXECUTE IMMEDIATE STMT
> USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TAB2);
320,322c380,386
< PROCEDURE TO_CURRENT(LAYER IN VARCHAR2, NEWTABNAME IN VARCHAR2,
< GIDCOLUMN IN VARCHAR2, GEOCOLNAME IN VARCHAR2,
< LAYER_GTYPE IN VARCHAR2, UPDATE_FLAG IN VARCHAR2) IS
---
> PROCEDURE TO_CURRENT(LAYER IN VARCHAR2,
> NEWTABNAME IN VARCHAR2,
> GIDCOLUMN IN VARCHAR2,
> GEOCOLNAME IN VARCHAR2,
> LAYER_GTYPE IN VARCHAR2,
> UPDATE_FLAG IN VARCHAR2)
> IS
324,325c388,389
< TO_81X(LAYER, NEWTABNAME, GIDCOLUMN, GEOCOLNAME, LAYER_GTYPE, UPDATE_FLAG);
< END;
---
> TO_81X(LAYER, NEWTABNAME, GIDCOLUMN, GEOCOLNAME, LAYER_GTYPE, UPDATE_FLAG);
> END TO_CURRENT;
329,336c393,401
< RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE IS
< EXTERNAL
< NAME "mdmige"
< LIBRARY ORDMD_MIG_LIBS
< WITH CONTEXT
< PARAMETERS(CONTEXT, DIMOBJ, DIMOBJ INDICATOR,
< GEOMOBJ, GEOMOBJ INDICATOR STRUCT,
< RETURN INDICATOR STRUCT, RETURN);
---
> RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE
> IS
> EXTERNAL
> NAME "mdmige"
> LIBRARY ORDMD_MIG_LIBS
> WITH CONTEXT
> PARAMETERS(CONTEXT, DIMOBJ, DIMOBJ INDICATOR,
> GEOMOBJ, GEOMOBJ INDICATOR STRUCT,
> RETURN INDICATOR STRUCT, RETURN);
339,340c404,407
< PROCEDURE FROM_815_TO_81X(TABNAME IN VARCHAR2, COLNAME IN VARCHAR2,
< COMMIT_INT IN NUMBER) IS
---
> PROCEDURE FROM_815_TO_81X(TABNAME IN VARCHAR2,
> COLNAME IN VARCHAR2,
> COMMIT_INT IN NUMBER)
> IS
356a424,427
> G_TABNAME VARCHAR2(130);
> G_TABNAME_NQ VARCHAR2(130);
> G_COLNAME VARCHAR2(1024);
> G_COLNAME_NQ VARCHAR2(1024);
357a429,442
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABNAME) ) THEN
> G_TABNAME := TABNAME;
> ELSE
> G_TABNAME := REPLACE(NLS_UPPER(TABNAME), '"');
> END IF;
> G_TABNAME_NQ := REPLACE(G_TABNAME, '"');
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(COLNAME) ) THEN
> G_COLNAME := COLNAME;
> ELSE
> G_COLNAME := REPLACE(NLS_UPPER(COLNAME), '"');
> END IF;
> G_COLNAME_NQ := REPLACE(G_COLNAME, '"');
>
361,362c446,447
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABNAME),
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME),
---
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAME),
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAME),
367,377c452,462
<
< STMT1 := 'SELECT rowid, ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME)
< || ' FROM ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABNAME) ||
< ' WHERE ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME) || ' is not null ';
< STMT2 := 'UPDATE ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABNAME) || ' SET ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME) || ' = :geom ' ||
< 'WHERE rowid = :rid';
---
>
> STMT1 := 'SELECT rowid, "' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAME_NQ) ||
> '" FROM "' || SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAME_NQ) ||
> '" WHERE "' || SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME) ||
> '" is not null';
> STMT2 := 'UPDATE "' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAME_NQ) ||
> '" SET "' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAME_NQ) ||
> '" = :geom WHERE rowid = :rid';
420a506
>
433c519,521
< PROCEDURE FROM_815_TO_81X(TABNAME IN VARCHAR2, COMMIT_INT IN NUMBER) IS
---
> PROCEDURE FROM_815_TO_81X(TABNAME IN VARCHAR2,
> COMMIT_INT IN NUMBER)
> IS
438c526,528
< COLNAME VARCHAR2(260);
---
> G_TABNAME VARCHAR2(130);
> G_TABNAME_NQ VARCHAR2(130);
> COLNAME VARCHAR2(1024);
441,442c531,540
< STMT := 'SELECT count(*) FROM tab ' ||
< 'WHERE tname = :tab ';
---
> IF ( SDO_UTIL.IS_BUMPY_CASE(TABNAME) ) THEN
> G_TABNAME := TABNAME;
> ELSE
> G_TABNAME := REPLACE(NLS_UPPER(TABNAME), '"');
> END IF;
> G_TABNAME_NQ := REPLACE(G_TABNAME, '"');
>
> STMT := 'SELECT count(*) ' ||
> 'FROM tab ' ||
> 'WHERE tname = :tab';
444c542
< USING NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABNAME));
---
> USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAME_NQ);
449,451c547,550
< STMT := 'SELECT column_name FROM sys.user_tab_columns ' ||
< 'WHERE table_name = :tab AND ' ||
< 'data_type = ''SDO_GEOMETRY'' ';
---
> STMT := 'SELECT column_name ' ||
> 'FROM sys.user_tab_columns ' ||
> 'WHERE table_name = :tab ' ||
> 'AND data_type = ''SDO_GEOMETRY'' ';
454c553
< USING NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABNAME));
---
> USING SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAME_NQ);
457a557
>
472,473c572,575
< PROCEDURE TO_CURRENT(TABNAME IN VARCHAR2, COLUMN_NAME IN VARCHAR2,
< COMMIT_INT IN NUMBER) IS
---
> PROCEDURE TO_CURRENT(TABNAME IN VARCHAR2,
> COLUMN_NAME IN VARCHAR2,
> COMMIT_INT IN NUMBER)
> IS
475,479c577,581
< IF (COLUMN_NAME IS NULL) THEN
< FROM_815_TO_81X(TABNAME, COMMIT_INT);
< ELSE
< FROM_815_TO_81X(TABNAME, COLUMN_NAME, COMMIT_INT);
< END IF;
---
> IF (COLUMN_NAME IS NULL) THEN
> FROM_815_TO_81X(TABNAME, COMMIT_INT);
> ELSE
> FROM_815_TO_81X(TABNAME, COLUMN_NAME, COMMIT_INT);
> END IF;
483c585,586
< PROCEDURE OGIS_METADATA_FROM IS
---
> PROCEDURE OGIS_METADATA_FROM
> IS
567c670,671
< FUNCTION TO_CURRENT(GEOM IN MDSYS.SDO_GEOMETRY,
---
>
> FUNCTION TO_CURRENT(GEOM IN MDSYS.SDO_GEOMETRY,
569c673,674
< RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE IS
---
> RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE
> IS
576c681
< BEGIN
---
> BEGIN
594,602c699,707
< GEOM2 := GEOM;
< FOR I IN 1 .. GEOM2.SDO_ELEM_INFO.COUNT LOOP
< IF (MOD(I,3) = 2) THEN
< ETYPE := MOD(GEOM2.SDO_ELEM_INFO(I), 10);
< GEOM2.SDO_ELEM_INFO(I) := ETYPE;
< END IF;
< END LOOP;
< RETURN MDMIGE(DIM, GEOM2);
< END IF;
---
> GEOM2 := GEOM;
> FOR I IN 1 .. GEOM2.SDO_ELEM_INFO.COUNT LOOP
> IF (MOD(I,3) = 2) THEN
> ETYPE := MOD(GEOM2.SDO_ELEM_INFO(I), 10);
> GEOM2.SDO_ELEM_INFO(I) := ETYPE;
> END IF;
> END LOOP;
> RETURN MDMIGE(DIM, GEOM2);
> END IF;
604,605c709,710
< RETURN MDMIGE(DIM, GEOM);
< END TO_CURRENT;
---
> RETURN MDMIGE(DIM, GEOM);
> END TO_CURRENT;
292c292
< BLOCK_TABLE VARCHAR2(270) := UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(PC.BLK_TABLE));
---
> BLOCK_TABLE VARCHAR2(270) := NLS_UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(PC.BLK_TABLE));
302,303c302,303
< WHERE UPPER(TABLE_NAME) = UPPER(PC.BLK_TABLE) AND
< UPPER(COLUMN_NAME) = 'BLK_EXTENT';
---
> WHERE NLS_UPPER(TABLE_NAME) = NLS_UPPER(PC.BLK_TABLE) AND
> NLS_UPPER(COLUMN_NAME) = 'BLK_EXTENT';
308c308
< UPPER(PC.BLK_TABLE),
---
> NLS_UPPER(PC.BLK_TABLE),
331,332c331,332
< WHERE UPPER(TABLE_NAME) = UPPER(PC.BLK_TABLE) AND
< UPPER(COLUMN_NAME) = 'BLK_EXTENT';
---
> WHERE NLS_UPPER(TABLE_NAME) = NLS_UPPER(PC.BLK_TABLE) AND
> NLS_UPPER(COLUMN_NAME) = 'BLK_EXTENT';
347a348,354
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(INPTABLE) ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Bumpy-case "inptable" name is not supported');
> RETURN;
> END IF;
>
407c414
< LOWER(INP.PTN_PARAMS),
---
> NLS_LOWER(INP.PTN_PARAMS),
1085c1092
< TABLE_NAME = UPPER(PC.BLK_TABLE) AND
---
> TABLE_NAME = NLS_UPPER(PC.BLK_TABLE) AND
4202c4209
< BLOCK_TABLE_NAME_FOR_MD VARCHAR2(270) := UPPER(DATA_TABLE_NAME_BASE || '$blocks');
---
> BLOCK_TABLE_NAME_FOR_MD VARCHAR2(270) := NLS_UPPER(DATA_TABLE_NAME_BASE || '$blocks');
4212c4219
< SOURCE_TABLE_NAME_UPPER VARCHAR2(270) := UPPER(SOURCE_TABLE_NAME);
---
> SOURCE_TABLE_NAME_UPPER VARCHAR2(270) := NLS_UPPER(SOURCE_TABLE_NAME);
4445c4452
< BASE_TABLE2 VARCHAR2(270) := UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(BASE_TABLE));
---
> BASE_TABLE2 VARCHAR2(270) := NLS_UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(BASE_TABLE));
4488,4489c4495,4496
< UPPER(INP_TABLE) IN (UPPER(TABLE_NAME), UPPER(OWNER || '.' || TABLE_NAME)) AND
< REGEXP_LIKE(UPPER(COLUMN_NAME), 'VAL_D[123456789][0123456789]*');
---
> NLS_UPPER(INP_TABLE) IN (NLS_UPPER(TABLE_NAME), NLS_UPPER(OWNER || '.' || TABLE_NAME)) AND
> REGEXP_LIKE(NLS_UPPER(COLUMN_NAME), 'VAL_D[123456789][0123456789]*');
4588c4595
< 'create table ' || UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(DATA_TABLE)) || ' as
---
> 'create table ' || NLS_UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(DATA_TABLE)) || ' as
4596c4603
< ' || UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(INP_TABLE)) || ' s';
---
> ' || NLS_UPPER(SYS.DBMS_ASSERT.ENQUOTE_NAME(INP_TABLE)) || ' s';
4649c4656
< USING (UPPER(DATA_TABLE_NAME_BASE) || '$BLOCKS');
---
> USING (NLS_UPPER(DATA_TABLE_NAME_BASE) || '$BLOCKS');
4688c4695
< TABLE_NAME = UPPER(SOURCE_TABLE_NAME);
---
> TABLE_NAME = NLS_UPPER(SOURCE_TABLE_NAME);
4747c4754
< TABLE_NAME = UPPER(DATA_TABLE_NAME_BASE || '$FINAL') AND
---
> TABLE_NAME = NLS_UPPER(DATA_TABLE_NAME_BASE || '$FINAL') AND
5376a5384,5395
> WHEN TOO_MANY_ROWS THEN
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[prvtpc.sql(' || $$PLSQL_LINE || ')16a2]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR(
> 'MD',
> 'CLIP_PC_INTO_TABLE',
> -13249,
> 'Query <' ||
> 'select ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(PC_COLUMN) ||
> ' from ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(PC_TABLE) ||
> ' where ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(ID_COLUMN) || ' = ' || ID || '> yielded more than one result. Consider using a primary key to avoid this.');
6086,6088c6105,6107
< ' where upper(table_name) = :table_name and' ||
< ' upper(column_name) = ''BLK_EXTENT'''
< USING SRID, UPPER(PC.BLK_TABLE);
---
> ' where nls_upper(table_name) = :table_name and' ||
> ' nls_upper(column_name) = ''BLK_EXTENT'''
> USING SRID, NLS_UPPER(PC.BLK_TABLE);
6101,6102c6120,6121
< ' where upper(table_name) = :table_name and' ||
< ' upper(column_name) = ''BLK_EXTENT''> failed. Consider committing any inserts.');
---
> ' where nls_upper(table_name) = :table_name and' ||
> ' nls_upper(column_name) = ''BLK_EXTENT''> failed. Consider committing any inserts.');
6283,6286c6302,6305
< UPPER(TEMP_TABLE_NAME_BASE || '$1'),
< UPPER(TEMP_TABLE_NAME_BASE || '$2'),
< UPPER(TEMP_TABLE_NAME_BASE || '$3'),
< UPPER(TEMP_TABLE_NAME_BASE || '$4');
---
> NLS_UPPER(TEMP_TABLE_NAME_BASE || '$1'),
> NLS_UPPER(TEMP_TABLE_NAME_BASE || '$2'),
> NLS_UPPER(TEMP_TABLE_NAME_BASE || '$3'),
> NLS_UPPER(TEMP_TABLE_NAME_BASE || '$4');
25446c25446 < PRIV := (CASE UPPER(TAB_LIST(I)) WHEN 'RDF_SESSION_EVENT$' THEN 'SELECT, INSERT, UPDATE, DELETE' ELSE 'READ' END); --- > PRIV := (CASE NLS_UPPER(TAB_LIST(I)) WHEN 'RDF_SESSION_EVENT$' THEN 'SELECT, INSERT, UPDATE, DELETE' ELSE 'READ' END);
72c72,75 < SELECT NLS_UPPER(SUBSTR(TABLE_NAME1, LEN+1)) INTO TNAMET FROM SYS.DUAL; --- > SELECT SUBSTR(TABLE_NAME1, LEN+1) INTO TNAMET FROM SYS.DUAL; > IF ( NOT SDO_UTIL.IS_BUMPY_CASE(TNAMET) ) THEN > TNAMET := REPLACE(NLS_UPPER(TNAMET), '"'); > END IF; 77c80,84 < TNAMET := NLS_UPPER(TABLE_NAME1); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_NAME1) ) THEN > TNAMET := TABLE_NAME1; > ELSE > TNAMET := REPLACE(NLS_UPPER(TABLE_NAME1), '"'); > END IF; 95c102,105 < SELECT NLS_UPPER(SUBSTR(TABLE_NAME2, LEN+1)) INTO TNAMET FROM SYS.DUAL; --- > SELECT SUBSTR(TABLE_NAME2, LEN+1) INTO TNAMET FROM SYS.DUAL; > IF ( NOT SDO_UTIL.IS_BUMPY_CASE(TNAMET) ) THEN > TNAMET := REPLACE(NLS_UPPER(TNAMET), '"'); > END IF; 100c110,114 < TNAMET := NLS_UPPER(TABLE_NAME2); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_NAME2) ) THEN > TNAMET := TABLE_NAME2; > ELSE > TNAMET := REPLACE(NLS_UPPER(TABLE_NAME2), '"'); > END IF; 117,118c131,141 < CNAME1 := NLS_UPPER(COLUMN_NAME1); < CNAME2 := NLS_UPPER(COLUMN_NAME2); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME1) ) THEN > CNAME1 := COLUMN_NAME1; > ELSE > CNAME1 := REPLACE(NLS_UPPER(COLUMN_NAME1), '"'); > END IF; > > IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME2) ) THEN > CNAME2 := COLUMN_NAME2; > ELSE > CNAME2 := REPLACE(NLS_UPPER(COLUMN_NAME2), '"'); > END IF; 310a334,337 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(1024); > G_COLNAM_NQ VARCHAR2(1024); 325,326c352,367 < STHEME_TABLENAME := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NLS_UPPER(THEME_TABLENAME)); < STHEME_COLNAME := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NLS_UPPER(THEME_COLNAME)); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(THEME_TABLENAME) ) THEN > G_TABNAM := THEME_TABLENAME; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(THEME_TABLENAME), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(THEME_COLNAME) ) THEN > G_COLNAM := THEME_COLNAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(THEME_COLNAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > > STHEME_TABLENAME := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM); > STHEME_COLNAME := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_COLNAM); 341,342c382,383 < STHEME_TABLENAME, < STHEME_COLNAME, --- > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM), 540a582,592 > IF ( SDO_UTIL.IS_BUMPY_CASE(BIN_COLNAME) ) THEN > SBIN_COLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(BIN_COLNAME); > ELSE > SBIN_COLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(REPLACE(NLS_UPPER(BIN_COLNAME), '"')); > END IF; > > IF ( SDO_UTIL.IS_BUMPY_CASE(BIN_TABLENAME) ) THEN > SBIN_TABLENAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(BIN_TABLENAME); > ELSE > SBIN_TABLENAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(REPLACE(NLS_UPPER(BIN_TABLENAME), '"')); > END IF; 542,543d593 < SBIN_COLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(NLS_UPPER(BIN_COLNAME)); < SBIN_TABLENAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(NLS_UPPER(BIN_TABLENAME)); 613a664,667 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(1024); > G_COLNAM_NQ VARCHAR2(1024); 637a692,702 > IF ( SDO_UTIL.IS_BUMPY_CASE(COLNAME) ) THEN > SCOLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLNAME); > ELSE > SCOLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(REPLACE(NLS_UPPER(COLNAME), '"')); > END IF; > > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLENAME) ) THEN > STABLENAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TABLENAME); > ELSE > STABLENAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(REPLACE(NLS_UPPER(TABLENAME), '"')); > END IF; 639,640d703 < SCOLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(NLS_UPPER(COLNAME)); < STABLENAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(NLS_UPPER(TABLENAME)); 759c822,825 < SELECT NLS_UPPER(SUBSTR(TABLENAME, LEN+1)) INTO TNAME FROM SYS.DUAL; --- > SELECT SUBSTR(TABLENAME, LEN+1) INTO TNAME FROM SYS.DUAL; > IF ( NOT SDO_UTIL.IS_BUMPY_CASE(TNAME) ) THEN > TNAME := REPLACE(NLS_UPPER(TNAME), '"'); > END IF; 764c830,834 < TNAME := NLS_UPPER(TABLENAME); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLENAME) ) THEN > TNAME := TABLENAME; > ELSE > TNAME := REPLACE(NLS_UPPER(TABLENAME), '"'); > END IF; 967a1038,1041 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(1024); > G_COLNAM_NQ VARCHAR2(1024); 991a1066,1079 > IF ( SDO_UTIL.IS_BUMPY_CASE(THEME_NAME) ) THEN > G_TABNAM := THEME_NAME; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(THEME_NAME), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(THEME_COLNAME) ) THEN > G_COLNAM := THEME_COLNAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(THEME_COLNAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > 994,996c1082,1083 < STHEME_COLNAME := < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(NLS_UPPER(THEME_COLNAME)); < STHEME_NAME := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NLS_UPPER(THEME_NAME)); --- > STHEME_COLNAME := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM); > STHEME_NAME := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(NLS_UPPER(G_TABNAM)); 1035c1122 < USING NLS_UPPER(STHEME_NAME), NLS_UPPER(AGGR_COL_STRING); --- > USING STHEME_NAME, NLS_UPPER(AGGR_COL_STRING); 1050c1137 < INTO OWNR USING NLS_UPPER(STHEME_NAME); --- > INTO OWNR USING STHEME_NAME; 1063c1150 < USING NLS_UPPER(STHEME_NAME), NLS_UPPER(AGGR_COL_STRING), OWNR; --- > USING STHEME_NAME, NLS_UPPER(AGGR_COL_STRING), OWNR; 1317c1404,1408 < --- > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(1024); > G_COLNAM_NQ VARCHAR2(1024); > 1334a1426,1439 > IF ( SDO_UTIL.IS_BUMPY_CASE(THEME_NAME) ) THEN > G_TABNAM := THEME_NAME; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(THEME_NAME), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(THEME_COLNAME) ) THEN > G_COLNAM := THEME_COLNAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(THEME_COLNAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > 1349,1350c1454,1455 < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(THEME_NAME), < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(THEME_COLNAME), --- > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM), 1362,1363c1467,1468 < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(THEME_NAME), < SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(THEME_COLNAME), --- > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_TABNAM), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM),
133a134,140
>
> IF ( SDO_UTIL.IS_BUMPY_CASE(INPTABLE) ) THEN
> MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Bumpy-case "inptable" name is not supported');
> RETURN;
> END IF;
>
1c1
< PACKAGE BODY sdo_tpidx AS
---
> PACKAGE BODY sdo_tpidx AS
3,4c3,4
< INVALID_TG_LAYER_ID exception;
< INVALID_TG_LAYER_GTYPE exception;
---
> INVALID_TG_LAYER_ID EXCEPTION;
> INVALID_TG_LAYER_GTYPE EXCEPTION;
6,33c6,27
< FUNCTION Index_Update (ia sys.odciindexinfo, rid varchar2,
< oldval mdsys.sdo_topo_geometry,
< newval mdsys.sdo_topo_geometry,
< env sys.ODCIEnv) return number is
< retval number;
< stmt varchar2(1000);
< upd_stmt varchar2(1000);
< cnt NUMBER;
< topology varchar2(130);
< topology_in varchar2(130);
< type cursor_type is REF CURSOR;
< query_crs cursor_type ;
< p_tgl_id number;
< layer_level number;
< stmt_n varchar2(200);
< stmt_e varchar2(200);
< stmt_f varchar2(200);
< id number;
< WS varchar2(130);
< isVersioned number;
< begin
< /* In the relation table, copy over the old values to the new
< topo_geometry if there are records.
< 1. Delete for the old tg_id those records that are set with a 'D'
< for the new tg_id.
< 2. Delete the records with a 'D' for the new tg_id.
< 2. Copy the rows from the old tg_id to the new tg_id.
< */
---
> FUNCTION INDEX_UPDATE (IA SYS.ODCIINDEXINFO, RID VARCHAR2,
> OLDVAL MDSYS.SDO_TOPO_GEOMETRY,
> NEWVAL MDSYS.SDO_TOPO_GEOMETRY,
> ENV SYS.ODCIENV) RETURN NUMBER IS
> RETVAL NUMBER;
> STMT VARCHAR2(1000);
> UPD_STMT VARCHAR2(1000);
> CNT NUMBER;
> TOPOLOGY VARCHAR2(130);
> TOPOLOGY_IN VARCHAR2(130);
> TYPE CURSOR_TYPE IS REF CURSOR;
> QUERY_CRS CURSOR_TYPE ;
> P_TGL_ID NUMBER;
> LAYER_LEVEL NUMBER;
> STMT_N VARCHAR2(200);
> STMT_E VARCHAR2(200);
> STMT_F VARCHAR2(200);
> ID NUMBER;
> WS VARCHAR2(130);
> ISVERSIONED NUMBER;
> BEGIN
>
35,36c29,36
< IF ( (newval is NOT NULL) AND (oldval is not NULL) ) THEN
< stmt := ' SELECT distinct topology from mdsys.user_sdo_topo_metadata ' ||
---
>
>
>
>
>
>
> IF ( (NEWVAL IS NOT NULL) AND (OLDVAL IS NOT NULL) ) THEN
> STMT := ' SELECT distinct topology from mdsys.user_sdo_topo_metadata ' ||
38c38,44
< EXECUTE IMMEDIATE stmt into topology_in USING newval.topology_id;
---
> EXECUTE IMMEDIATE STMT INTO TOPOLOGY_IN USING NEWVAL.TOPOLOGY_ID;
>
> TOPOLOGY := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TOPOLOGY_IN);
> ISVERSIONED := SDO_TPIDX.ISVERSIONED(TOPOLOGY);
>
>
>
40,41d45
< topology := SYS.DBMS_ASSERT.qualified_sql_name(topology_in);
< isVersioned := sdo_tpidx.isversioned(topology);
43,47d46
< /* first cleanup the higher level layers so that they point to the
< new tg_id in the relation$ table.
< for each parent layer with current layer as the child layer
< update the relation$
< */
49c48,49
< stmt := ' select TG_LAYER_ID from mdsys.user_sdo_topo_metadata '||
---
>
> STMT := ' select TG_LAYER_ID from mdsys.user_sdo_topo_metadata '||
51,52c51,52
< OPEN query_crs FOR stmt using newval.topology_id,
< abs(newval.tg_layer_id);
---
> OPEN QUERY_CRS FOR STMT USING NEWVAL.TOPOLOGY_ID,
> ABS(NEWVAL.TG_LAYER_ID);
55,57c55,57
< FETCH query_crs INTO p_tgl_id;
< EXIT when query_crs%NOTFOUND ;
< upd_stmt := ' update '||topology||'_RELATION$ ' ||
---
> FETCH QUERY_CRS INTO P_TGL_ID;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
> UPD_STMT := ' update '||TOPOLOGY||'_RELATION$ ' ||
61,62c61,62
< EXECUTE immediate upd_stmt
< USING newval.tg_id, p_tgl_id, oldval.tg_id;
---
> EXECUTE IMMEDIATE UPD_STMT
> USING NEWVAL.TG_ID, P_TGL_ID, OLDVAL.TG_ID;
65c65,66
< CLOSE query_crs ;
---
> CLOSE QUERY_CRS ;
>
66a68
>
68,70c70
< /* lock the old rows from the primitive tables, if the tg_layer_id
< is a leaf level layer */
< EXECUTE IMMEDIATE
---
> EXECUTE IMMEDIATE
73c73
< into layer_level using newval.topology_id, newval.tg_layer_id;
---
> INTO LAYER_LEVEL USING NEWVAL.TOPOLOGY_ID, NEWVAL.TG_LAYER_ID;
75,77c75,77
< if ( newval.tg_layer_id < 0) then
< layer_level := 0;
< end if;
---
> IF ( NEWVAL.TG_LAYER_ID < 0) THEN
> LAYER_LEVEL := 0;
> END IF;
79c79
< IF (layer_level = 0) then
---
> IF (LAYER_LEVEL = 0) THEN
81c81
< stmt_n := ' select topo_id from '||topology||'_RELATION$ '||
---
> STMT_N := ' select topo_id from '||TOPOLOGY||'_RELATION$ '||
83,84c83,84
< ' and tg_layer_id = :lid ';
< stmt_e := ' select topo_id from '||topology||'_RELATION$ '||
---
> ' and tg_layer_id = :lid ';
> STMT_E := ' select topo_id from '||TOPOLOGY||'_RELATION$ '||
86,87c86,87
< ' and tg_layer_id = :lid ';
< stmt_f := ' select topo_id from '||topology||'_RELATION$ '||
---
> ' and tg_layer_id = :lid ';
> STMT_F := ' select topo_id from '||TOPOLOGY||'_RELATION$ '||
91,92c91,92
< stmt := ' select node_id from '||topology||'_NODE$' ||
< ' where node_id in ( ' ||stmt_n|| ') for update ';
---
> STMT := ' select node_id from '||TOPOLOGY||'_NODE$' ||
> ' where node_id in ( ' ||STMT_N|| ') for update ';
94c94
< OPEN query_crs FOR stmt using newval.tg_id, newval.tg_layer_id;
---
> OPEN QUERY_CRS FOR STMT USING NEWVAL.TG_ID, NEWVAL.TG_LAYER_ID;
97,99c97,99
< FETCH query_crs into id;
< IF (id is not NULL AND isVersioned = 1) THEN
< EXECUTE IMMEDIATE 'SELECT DBMS_WM.GetWorkspace FROM SYS.DUAL ' into WS;
---
> FETCH QUERY_CRS INTO ID;
> IF (ID IS NOT NULL AND ISVERSIONED = 1) THEN
> EXECUTE IMMEDIATE 'SELECT DBMS_WM.GetWorkspace FROM SYS.DUAL ' INTO WS;
101c101
< EXECUTE IMMEDIATE
---
> EXECUTE IMMEDIATE
103c103
< USING WS, topology||'_NODE$', 'node_id = '||sdo_util.number_to_char(id) ;
---
> USING WS, TOPOLOGY||'_NODE$', 'node_id = '||SDO_UTIL.NUMBER_TO_CHAR(ID) ;
105,106c105,106
< END IF;
< EXIT when query_crs%NOTFOUND ;
---
> END IF;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
109c109
< CLOSE query_crs;
---
> CLOSE QUERY_CRS;
111,112c111,112
< stmt := ' select edge_id from '||topology||'_EDGE$' ||
< ' where edge_id in ( ' ||stmt_e|| ') for update ';
---
> STMT := ' select edge_id from '||TOPOLOGY||'_EDGE$' ||
> ' where edge_id in ( ' ||STMT_E|| ') for update ';
114c114
< OPEN query_crs FOR stmt using newval.tg_id, newval.tg_layer_id;
---
> OPEN QUERY_CRS FOR STMT USING NEWVAL.TG_ID, NEWVAL.TG_LAYER_ID;
117,119c117,119
< FETCH query_crs into id;
< IF (id is not NULL AND isVersioned = 1) THEN
< EXECUTE IMMEDIATE 'SELECT DBMS_WM.GetWorkspace FROM SYS.DUAL ' into WS;
---
> FETCH QUERY_CRS INTO ID;
> IF (ID IS NOT NULL AND ISVERSIONED = 1) THEN
> EXECUTE IMMEDIATE 'SELECT DBMS_WM.GetWorkspace FROM SYS.DUAL ' INTO WS;
121c121
< EXECUTE IMMEDIATE
---
> EXECUTE IMMEDIATE
123c123
< USING WS, topology||'_EDGE$', 'edge_id = '||sdo_util.number_to_char(id) ;
---
> USING WS, TOPOLOGY||'_EDGE$', 'edge_id = '||SDO_UTIL.NUMBER_TO_CHAR(ID) ;
125,126c125,126
< END IF;
< EXIT when query_crs%NOTFOUND ;
---
> END IF;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
129c129
< CLOSE query_crs;
---
> CLOSE QUERY_CRS;
131,132c131,132
< stmt := ' select face_id from '||topology||'_FACE$' ||
< ' where face_id in ( ' ||stmt_f|| ') for update ';
---
> STMT := ' select face_id from '||TOPOLOGY||'_FACE$' ||
> ' where face_id in ( ' ||STMT_F|| ') for update ';
134c134
< OPEN query_crs FOR stmt using newval.tg_id, newval.tg_layer_id;
---
> OPEN QUERY_CRS FOR STMT USING NEWVAL.TG_ID, NEWVAL.TG_LAYER_ID;
137,139c137,139
< FETCH query_crs into id;
< IF (id is not NULL AND isVersioned = 1) THEN
< EXECUTE IMMEDIATE 'SELECT DBMS_WM.GetWorkspace FROM SYS.DUAL ' into WS;
---
> FETCH QUERY_CRS INTO ID;
> IF (ID IS NOT NULL AND ISVERSIONED = 1) THEN
> EXECUTE IMMEDIATE 'SELECT DBMS_WM.GetWorkspace FROM SYS.DUAL ' INTO WS;
141c141
< EXECUTE IMMEDIATE
---
> EXECUTE IMMEDIATE
143c143
< USING WS, topology||'_FACE$', 'face_id = '||sdo_util.number_to_char(id);
---
> USING WS, TOPOLOGY||'_FACE$', 'face_id = '||SDO_UTIL.NUMBER_TO_CHAR(ID);
145,146c145,146
< END IF;
< EXIT when query_crs%NOTFOUND ;
---
> END IF;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
149c149,151
< CLOSE query_crs;
---
> CLOSE QUERY_CRS;
>
> END IF;
151c153
< end if;
---
>
153,155c155
< /* delete rows from the old tg_id corresponding to rows set to 'D' for
< new tg_id */
< stmt := ' DELETE FROM '||topology||'_RELATION$ ' ||
---
> STMT := ' DELETE FROM '||TOPOLOGY||'_RELATION$ ' ||
157c157
< ' ( SELECT tg_layer_id, '||sdo_util.number_to_char(oldval.tg_id)||', '||
---
> ' ( SELECT tg_layer_id, '||SDO_UTIL.NUMBER_TO_CHAR(OLDVAL.TG_ID)||', '||
161c161
< EXECUTE IMMEDIATE stmt using newval.tg_layer_id, newval.tg_id;
---
> EXECUTE IMMEDIATE STMT USING NEWVAL.TG_LAYER_ID, NEWVAL.TG_ID;
163,164c163,164
< /* if there are rows to append from the old tg_id, do it here */
< /* and do this only if the tg_id is different from the old value */
---
>
>
166,167c166,167
< if (newval.tg_id <> oldval.tg_id) then
< stmt := ' SELECT count(*) from MDSYS.SDO_TOPO_RELATION_DATA ' ||
---
> IF (NEWVAL.TG_ID <> OLDVAL.TG_ID) THEN
> STMT := ' SELECT count(*) from MDSYS.SDO_TOPO_RELATION_DATA ' ||
170c170
< EXECUTE IMMEDIATE stmt into cnt using newval.TG_LAYER_ID, newval.TG_ID;
---
> EXECUTE IMMEDIATE STMT INTO CNT USING NEWVAL.TG_LAYER_ID, NEWVAL.TG_ID;
172,174c172,174
< IF (cnt = 1) THEN /* we need to copy the rows from oldval to newval */
< stmt := ' INSERT INTO '||topology||'_RELATION$ ' ||
< ' SELECT tg_layer_id, '||sdo_util.number_to_char(newval.tg_id)||', '||
---
> IF (CNT = 1) THEN
> STMT := ' INSERT INTO '||TOPOLOGY||'_RELATION$ ' ||
> ' SELECT tg_layer_id, '||SDO_UTIL.NUMBER_TO_CHAR(NEWVAL.TG_ID)||', '||
176c176
< ' FROM '||topology||'_RELATION$ '||
---
> ' FROM '||TOPOLOGY||'_RELATION$ '||
178,179c178,179
< EXECUTE IMMEDIATE stmt USING
< oldval.tg_layer_id, oldval.tg_id;
---
> EXECUTE IMMEDIATE STMT USING
> OLDVAL.TG_LAYER_ID, OLDVAL.TG_ID;
181c181
< stmt := ' SELECT count(*) from MDSYS.SDO_TOPO_RELATION_DATA ' ||
---
> STMT := ' SELECT count(*) from MDSYS.SDO_TOPO_RELATION_DATA ' ||
183,185c183,185
< EXECUTE IMMEDIATE stmt into cnt using newval.TG_LAYER_ID, newval.TG_ID;
< IF (cnt = 0) THEN /* Error: bug 4681927 */
< mderr.raise_md_error('MD','SDO',-13122);
---
> EXECUTE IMMEDIATE STMT INTO CNT USING NEWVAL.TG_LAYER_ID, NEWVAL.TG_ID;
> IF (CNT = 0) THEN
> MDERR.RAISE_MD_ERROR('MD','SDO',-13122);
187c187
< end if;
---
> END IF;
189,190c189,190
< /* now cleanup the rows with 'A' and 'D' values for the topo_attribute */
< stmt := ' DELETE FROM MDSYS.SDO_TOPO_RELATION_DATA ' ||
---
>
> STMT := ' DELETE FROM MDSYS.SDO_TOPO_RELATION_DATA ' ||
193c193
< EXECUTE IMMEDIATE stmt using newval.TG_LAYER_ID, newval.TG_ID;
---
> EXECUTE IMMEDIATE STMT USING NEWVAL.TG_LAYER_ID, NEWVAL.TG_ID;
196,200c196,200
< /* remove the dummy entries in MDSYS.SDO_TOPO_RELATION_DATA
< for this special case */
< if ( (oldval is NULL) AND (newval is not NULL) ) then
< /* now cleanup the rows with 'A' and 'D' values for the topo_attribute */
< stmt := ' DELETE FROM MDSYS.SDO_TOPO_RELATION_DATA ' ||
---
>
>
> IF ( (OLDVAL IS NULL) AND (NEWVAL IS NOT NULL) ) THEN
>
> STMT := ' DELETE FROM MDSYS.SDO_TOPO_RELATION_DATA ' ||
203,204c203,215
< EXECUTE IMMEDIATE stmt using newval.TG_LAYER_ID, newval.TG_ID;
< end if;
---
> EXECUTE IMMEDIATE STMT USING NEWVAL.TG_LAYER_ID, NEWVAL.TG_ID;
> END IF;
>
> IF ( (NEWVAL IS NOT NULL) AND (OLDVAL IS NOT NULL) AND
> (OLDVAL.TG_ID = NEWVAL.TG_ID) ) THEN
> RETVAL := SDO_TPIDX.INDEX_DELETE(IA, NULL, OLDVAL, ENV);
> RETVAL := SDO_TPIDX.INDEX_INSERT(IA, NULL, NEWVAL, ENV);
> ELSE
> RETVAL := SDO_TPIDX.INDEX_DELETE(IA, RID, OLDVAL, ENV);
> RETVAL := SDO_TPIDX.INDEX_INSERT(IA, RID, NEWVAL, ENV);
> END IF;
> RETURN RETVAL;
> END;
206,224c217,224
< if ( (newval is not NULL) AND (oldval is not NULL) AND
< (oldval.tg_id = newval.tg_id) ) then
< retval := sdo_tpidx.index_delete(ia, null, oldval, env);
< retval := sdo_tpidx.index_insert(ia, null, newval, env);
< else
< retval := sdo_tpidx.index_delete(ia, rid, oldval, env);
< retval := sdo_tpidx.index_insert(ia, rid, newval, env);
< end if;
< return retval;
< end;
<
< -----------------------------index_insert------------------------------------
< ---
< --- BUGS:
< --- internal: 02/27/04, add the collection type dealing
< ---
< FUNCTION index_insert (ia sys.odciindexinfo, rid varchar2,
< newval mdsys.sdo_topo_geometry,
< env sys.ODCIEnv)
---
>
>
>
>
>
> FUNCTION INDEX_INSERT (IA SYS.ODCIINDEXINFO, RID VARCHAR2,
> NEWVAL MDSYS.SDO_TOPO_GEOMETRY,
> ENV SYS.ODCIENV)
226,239c226,239
< stmt varchar2(1000);
< stmt1 varchar2(1000);
< table_name varchar2(260);
< column_name varchar2(130);
< topology varchar2(130);
< topology_in varchar2(130);
< topology_id number;
< feature_L_id number;
< feature_type number;
< feature_id number;
< idx_columns SYS.ODCIColInfoList;
< cnt number;
< layer_gtype varchar2(32);
< idx_tab varchar2(260);
---
> STMT VARCHAR2(1000);
> STMT1 VARCHAR2(1000);
> TABLE_NAME VARCHAR2(260);
> COLUMN_NAME VARCHAR2(130);
> TOPOLOGY VARCHAR2(130);
> TOPOLOGY_IN VARCHAR2(130);
> TOPOLOGY_ID NUMBER;
> FEATURE_L_ID NUMBER;
> FEATURE_TYPE NUMBER;
> FEATURE_ID NUMBER;
> IDX_COLUMNS SYS.ODCICOLINFOLIST;
> CNT NUMBER;
> LAYER_GTYPE VARCHAR2(32);
> IDX_TAB VARCHAR2(260);
242,243c242,243
< IF (newval is NULL) THEN
< return SYS.ODCIConst.Success;
---
> IF (NEWVAL IS NULL) THEN
> RETURN SYS.ODCICONST.SUCCESS;
246,252c246,252
< idx_columns := ia.IndexCols;
< table_name := idx_columns(1).TableName;
< column_name := idx_columns(1).ColName;
< column_name := REPLACE(column_name, '"');
< topology_id := newval.topology_id;
< feature_L_id := newval.tg_layer_id;
< feature_id := newval.tg_id;
---
> IDX_COLUMNS := IA.INDEXCOLS;
> TABLE_NAME := IDX_COLUMNS(1).TABLENAME;
> COLUMN_NAME := IDX_COLUMNS(1).COLNAME;
> COLUMN_NAME := REPLACE(COLUMN_NAME, '"');
> TOPOLOGY_ID := NEWVAL.TOPOLOGY_ID;
> FEATURE_L_ID := NEWVAL.TG_LAYER_ID;
> FEATURE_ID := NEWVAL.TG_ID;
255,257c255,257
< IF (feature_L_id IS NULL) THEN
< mderr.raise_md_error('MD', 'SDO', -13113);
< RETURN SYS.ODCIConst.Error;
---
> IF (FEATURE_L_ID IS NULL) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13113);
> RETURN SYS.ODCICONST.ERROR;
260,261c260,261
< -- check the layer_id consistency
< topology_in := NULL;
---
>
> TOPOLOGY_IN := NULL;
263c263
< stmt := 'select topology from mdsys.user_sdo_topo_info where owner = :owner ' ||
---
> STMT := 'select topology from mdsys.user_sdo_topo_info where owner = :owner ' ||
267,269c267,269
< EXECUTE IMMEDIATE stmt INTO topology_in
< USING ia.IndexSchema, topology_id,table_name,
< column_name, abs(feature_L_id);
---
> EXECUTE IMMEDIATE STMT INTO TOPOLOGY_IN
> USING IA.INDEXSCHEMA, TOPOLOGY_ID,TABLE_NAME,
> COLUMN_NAME, ABS(FEATURE_L_ID);
272,273c272,273
< mderr.raise_md_error('MD', 'SDO', -13113);
< RETURN SYS.ODCIConst.Error;
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13113);
> RETURN SYS.ODCICONST.ERROR;
276,279c276,279
<
< IF (topology_in IS NULL) THEN
< mderr.raise_md_error('MD', 'SDO', -13261, stmt);
< raise INVALID_TG_LAYER_ID;
---
>
> IF (TOPOLOGY_IN IS NULL) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13261, STMT);
> RAISE INVALID_TG_LAYER_ID;
281,285c281,285
<
< topology := SYS.DBMS_ASSERT.qualified_sql_name(topology_in);
<
< -- check the feature type consistency
< stmt := ' select SDO_LAYER_GTYPE from mdsys.all_sdo_index_metadata ' ||
---
>
> TOPOLOGY := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TOPOLOGY_IN);
>
>
> STMT := ' select SDO_LAYER_GTYPE from mdsys.all_sdo_index_metadata ' ||
287c287
< EXECUTE IMMEDIATE stmt INTO layer_gtype USING ia.IndexSchema, ia.IndexName;
---
> EXECUTE IMMEDIATE STMT INTO LAYER_GTYPE USING IA.INDEXSCHEMA, IA.INDEXNAME;
289,292c289,292
< IF (layer_gtype = 'POLYGON' ) THEN
< IF (newval.tg_type <> 3) THEN
< -- rollback if there is an error
< stmt := 'delete from '||topology||'_relation$ where ' ||
---
> IF (LAYER_GTYPE = 'POLYGON' ) THEN
> IF (NEWVAL.TG_TYPE <> 3) THEN
>
> STMT := 'delete from '||TOPOLOGY||'_relation$ where ' ||
294,295c294,295
< EXECUTE IMMEDIATE stmt USING feature_L_id, feature_id;
< raise INVALID_TG_LAYER_GTYPE;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
> RAISE INVALID_TG_LAYER_GTYPE;
297,300c297,300
< ELSIF (layer_gtype = 'LINE' OR layer_gtype = 'CURVE' ) THEN
< IF (newval.tg_type <> 2) THEN
< -- rollback if there is an error
< stmt := 'delete from '||topology||'_relation$ where ' ||
---
> ELSIF (LAYER_GTYPE = 'LINE' OR LAYER_GTYPE = 'CURVE' ) THEN
> IF (NEWVAL.TG_TYPE <> 2) THEN
>
> STMT := 'delete from '||TOPOLOGY||'_relation$ where ' ||
302,303c302,303
< EXECUTE IMMEDIATE stmt USING feature_L_id, feature_id;
< raise INVALID_TG_LAYER_GTYPE;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
> RAISE INVALID_TG_LAYER_GTYPE;
305,308c305,308
< ELSIF (layer_gtype = 'POINT' ) THEN
< IF (newval.tg_type <> 1) THEN
< -- rollback if there is an error
< stmt := 'delete from '||topology||'_relation$ where ' ||
---
> ELSIF (LAYER_GTYPE = 'POINT' ) THEN
> IF (NEWVAL.TG_TYPE <> 1) THEN
>
> STMT := 'delete from '||TOPOLOGY||'_relation$ where ' ||
310,311c310,311
< EXECUTE IMMEDIATE stmt USING feature_L_id, feature_id;
< raise INVALID_TG_LAYER_GTYPE;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
> RAISE INVALID_TG_LAYER_GTYPE;
313,316c313,316
< ELSIF (layer_gtype = 'COLLECTION') THEN
< IF ((newval.tg_type < 1) OR
< (newval.tg_type > 4)) THEN
< stmt := 'delete from '||topology||'_relation$ where ' ||
---
> ELSIF (LAYER_GTYPE = 'COLLECTION') THEN
> IF ((NEWVAL.TG_TYPE < 1) OR
> (NEWVAL.TG_TYPE > 4)) THEN
> STMT := 'delete from '||TOPOLOGY||'_relation$ where ' ||
318,320c318,320
< EXECUTE IMMEDIATE stmt USING feature_L_id, feature_id;
< raise INVALID_TG_LAYER_GTYPE;
< END IF;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
> RAISE INVALID_TG_LAYER_GTYPE;
> END IF;
321a322,325
>
>
>
>
323,324c327
< /* insert into the relation$ table */
< stmt := ' INSERT INTO '||topology||'_RELATION$ '||
---
> STMT := ' INSERT INTO '||TOPOLOGY||'_RELATION$ '||
326,327c329,330
< ' WHERE A.tg_layer_id = :flid and A.tg_id = :fid ';
< EXECUTE immediate stmt USING feature_L_id, feature_id;
---
> ' WHERE A.tg_layer_id = :flid and A.tg_id = :fid and A.TOPO_TYPE>0 ';
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
329,332c332,335
< -- PARTITION OR NON PARTITION CASE
< IF (ia.IndexPartition IS NULL ) THEN
< -- insert the rowid, feature id into the index table
< stmt := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
---
>
> IF (IA.INDEXPARTITION IS NULL ) THEN
>
> STMT := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
334c337
< EXECUTE IMMEDIATE stmt into idx_tab using ia.IndexSchema, ia.IndexName;
---
> EXECUTE IMMEDIATE STMT INTO IDX_TAB USING IA.INDEXSCHEMA, IA.INDEXNAME;
336,337c339,340
< -- insert the rowid, feature id into the index table
< stmt := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
---
>
> STMT := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
341,342c344,345
< EXECUTE IMMEDIATE stmt INTO idx_tab USING
< ia.IndexSchema, ia.IndexName, ia.IndexPartition;
---
> EXECUTE IMMEDIATE STMT INTO IDX_TAB USING
> IA.INDEXSCHEMA, IA.INDEXNAME, IA.INDEXPARTITION;
346,351c349,354
< -- insert into the index table
< /* do this only if rid is not NULL */
< IF (rid is not NULL) THEN
< idx_tab := ia.IndexSchema||'.'||idx_tab;
< stmt := ' INSERT INTO ' ||
< SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(idx_tab) ||
---
>
>
> IF (RID IS NOT NULL) THEN
> IDX_TAB := IA.INDEXSCHEMA||'.'||IDX_TAB;
> STMT := ' INSERT INTO ' ||
> SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(IDX_TAB) ||
353c356
< EXECUTE IMMEDIATE stmt USING feature_id, rid;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_ID, RID;
356c359
< stmt := ' DELETE from MDSYS.SDO_TOPO_RELATION_DATA A ' ||
---
> STMT := ' DELETE from MDSYS.SDO_TOPO_RELATION_DATA A ' ||
358c361
< EXECUTE immediate stmt USING feature_L_id, feature_id;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
362,364c365,367
< dbms_output.put_line(sdo_util.number_to_char(feature_L_id));
< mderr.raise_md_error('MD', 'SDO', -13121, SYS.DBMS_ASSERT.noop(stmt));
< RETURN SYS.ODCIConst.Error;
---
> DBMS_OUTPUT.PUT_LINE(SDO_UTIL.NUMBER_TO_CHAR(FEATURE_L_ID));
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13121, STMT);
> RETURN SYS.ODCICONST.ERROR;
368,371c371,374
< stmt1 := sdo_util.number_to_char(cnt) || '::'||ia.IndexSchema||'::'||topology||
< '::'||table_name||'::'||column_name;
< mderr.raise_md_error('MD', 'SDO', -13113, SYS.DBMS_ASSERT.noop(stmt1));
< RETURN SYS.ODCIConst.Error;
---
> STMT1 := SDO_UTIL.NUMBER_TO_CHAR(CNT) || '::'||IA.INDEXSCHEMA||'::'||TOPOLOGY||
> '::'||TABLE_NAME||'::'||COLUMN_NAME;
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13113, STMT1);
> RETURN SYS.ODCICONST.ERROR;
374c377
< RETURN SYS.ODCIConst.Success;
---
> RETURN SYS.ODCICONST.SUCCESS;
377,379c380,382
< FUNCTION index_delete (ia sys.odciindexinfo, rid varchar2,
< oldval mdsys.sdo_topo_geometry,
< env sys.ODCIEnv)
---
> FUNCTION INDEX_DELETE (IA SYS.ODCIINDEXINFO, RID VARCHAR2,
> OLDVAL MDSYS.SDO_TOPO_GEOMETRY,
> ENV SYS.ODCIENV)
381,406c384,409
< stmt varchar2(1000);
< q_stmt varchar2(1000);
< topology varchar2(21);
< topology_in varchar2(21);
< topology_id number;
< feature_L_id number;
< feature_id number;
< idx_tab varchar2(260);
< type cursor_type is REF CURSOR;
< query_crs cursor_type ;
< p_tgl_id number;
< cnt number;
< layer_level number;
< id number;
< stmt_n varchar2(200);
< stmt_e varchar2(200);
< stmt_f varchar2(200);
< WS varchar2(130);
< old_sp varchar2(128);
< old_ws varchar2(128);
< parent_sp varchar2(128) ;
< parent_ws varchar2(128) ;
< isVersioned number;
< idx_columns SYS.ODCIColInfoList;
< table_name varchar2(130);
< ver_status varchar2(10);
---
> STMT VARCHAR2(1000);
> Q_STMT VARCHAR2(1000);
> TOPOLOGY VARCHAR2(21);
> TOPOLOGY_IN VARCHAR2(21);
> TOPOLOGY_ID NUMBER;
> FEATURE_L_ID NUMBER;
> FEATURE_ID NUMBER;
> IDX_TAB VARCHAR2(260);
> TYPE CURSOR_TYPE IS REF CURSOR;
> QUERY_CRS CURSOR_TYPE ;
> P_TGL_ID NUMBER;
> CNT NUMBER;
> LAYER_LEVEL NUMBER;
> ID NUMBER;
> STMT_N VARCHAR2(200);
> STMT_E VARCHAR2(200);
> STMT_F VARCHAR2(200);
> WS VARCHAR2(130);
> OLD_SP VARCHAR2(128);
> OLD_WS VARCHAR2(128);
> PARENT_SP VARCHAR2(128) ;
> PARENT_WS VARCHAR2(128) ;
> ISVERSIONED NUMBER;
> IDX_COLUMNS SYS.ODCICOLINFOLIST;
> TABLE_NAME VARCHAR2(130);
> VER_STATUS VARCHAR2(10);
410,411c413,414
< IF (oldval IS NULL) THEN
< RETURN SYS.ODCIConst.Success;
---
> IF (OLDVAL IS NULL) THEN
> RETURN SYS.ODCICONST.SUCCESS;
414,416c417,419
< topology_id := oldval.topology_id;
< feature_L_id := oldval.tg_layer_id;
< feature_id := oldval.tg_id;
---
> TOPOLOGY_ID := OLDVAL.TOPOLOGY_ID;
> FEATURE_L_ID := OLDVAL.TG_LAYER_ID;
> FEATURE_ID := OLDVAL.TG_ID;
418c421
< stmt := ' select topology from mdsys.user_sdo_topo_info where ' ||
---
> STMT := ' select topology from mdsys.user_sdo_topo_info where ' ||
420c423,424
< EXECUTE IMMEDIATE stmt INTO topology_in USING topology_id, abs(feature_L_id);
---
> EXECUTE IMMEDIATE STMT INTO TOPOLOGY_IN USING TOPOLOGY_ID, ABS(FEATURE_L_ID);
>
421a426,427
> TOPOLOGY := SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TOPOLOGY_IN);
>
423,426c429
< topology := SYS.DBMS_ASSERT.qualified_sql_name(topology_in);
< /* lock the old rows from the primitive tables, if the tg_layer_id
< is a leaf level layer */
< EXECUTE IMMEDIATE
---
> EXECUTE IMMEDIATE
429c432
< INTO layer_level USING topology_id, feature_l_id;
---
> INTO LAYER_LEVEL USING TOPOLOGY_ID, FEATURE_L_ID;
431,432c434,435
< IF ( feature_l_id < 0) THEN
< layer_level := 0;
---
> IF ( FEATURE_L_ID < 0) THEN
> LAYER_LEVEL := 0;
435c438
< IF (layer_level = 0) THEN
---
> IF (LAYER_LEVEL = 0) THEN
437c440
< stmt_n := ' select topo_id from '||topology||'_RELATION$ '||
---
> STMT_N := ' select topo_id from '||TOPOLOGY||'_RELATION$ '||
439c442
< ' and tg_layer_id = :lid ';
---
> ' and tg_layer_id = :lid ';
441c444
< stmt_e := ' select abs(topo_id) from '||topology||'_RELATION$ '||
---
> STMT_E := ' select abs(topo_id) from '||TOPOLOGY||'_RELATION$ '||
443c446
< ' and tg_layer_id = :lid ';
---
> ' and tg_layer_id = :lid ';
445c448
< stmt_f := ' select topo_id from '||topology||'_RELATION$ '||
---
> STMT_F := ' select topo_id from '||TOPOLOGY||'_RELATION$ '||
449,450c452,453
< stmt := ' select node_id from '||topology||'_NODE$' ||
< ' where node_id in ( ' ||stmt_n|| ') for update ';
---
> STMT := ' select node_id from '||TOPOLOGY||'_NODE$' ||
> ' where node_id in ( ' ||STMT_N|| ') for update ';
452c455
< OPEN query_crs FOR stmt USING feature_id, feature_l_id;
---
> OPEN QUERY_CRS FOR STMT USING FEATURE_ID, FEATURE_L_ID;
455,456c458,459
< FETCH query_crs INTO id;
< EXIT when query_crs%NOTFOUND ;
---
> FETCH QUERY_CRS INTO ID;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
459c462
< CLOSE query_crs;
---
> CLOSE QUERY_CRS;
461,462c464,465
< stmt := ' select edge_id from '||topology||'_EDGE$' ||
< ' where edge_id in ( ' ||stmt_e|| ') for update ';
---
> STMT := ' select edge_id from '||TOPOLOGY||'_EDGE$' ||
> ' where edge_id in ( ' ||STMT_E|| ') for update ';
464c467
< OPEN query_crs FOR stmt USING feature_id, feature_l_id;
---
> OPEN QUERY_CRS FOR STMT USING FEATURE_ID, FEATURE_L_ID;
467,468c470,471
< FETCH query_crs INTO id;
< EXIT when query_crs%NOTFOUND ;
---
> FETCH QUERY_CRS INTO ID;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
471c474
< CLOSE query_crs;
---
> CLOSE QUERY_CRS;
473,474c476,477
< stmt := ' select face_id from '||topology||'_FACE$' ||
< ' where face_id in ( ' ||stmt_f|| ') for update ';
---
> STMT := ' select face_id from '||TOPOLOGY||'_FACE$' ||
> ' where face_id in ( ' ||STMT_F|| ') for update ';
476c479
< OPEN query_crs FOR stmt USING feature_id, feature_l_id;
---
> OPEN QUERY_CRS FOR STMT USING FEATURE_ID, FEATURE_L_ID;
479,480c482,483
< FETCH query_crs INTO id;
< EXIT when query_crs%NOTFOUND ;
---
> FETCH QUERY_CRS INTO ID;
> EXIT WHEN QUERY_CRS%NOTFOUND ;
483c486
< CLOSE query_crs;
---
> CLOSE QUERY_CRS;
487,496c490,499
< -- delete from the <>_Relation$ table the rows for feature
< -- do this only if this is not a row migration case
< IF ( ( (bitand( env.EnvFlags, SYS.ODCIConst.RowMigration)
< = SYS.ODCIConst.RowMigration) AND
< (bitand( env.EnvFlags, SYS.ODCIConst.IndexKeyChanged)
< = SYS.ODCIConst.IndexKeyChanged) ) OR
< (bitand( env.EnvFlags, SYS.ODCIConst.RowMigration)
< <> SYS.ODCIConst.RowMigration) ) THEN
< IF (rid is not NULL) THEN
< stmt := 'delete from '||topology||'_relation$ where ' ||
---
>
>
> IF ( ( (BITAND( ENV.ENVFLAGS, SYS.ODCICONST.ROWMIGRATION)
> = SYS.ODCICONST.ROWMIGRATION) AND
> (BITAND( ENV.ENVFLAGS, SYS.ODCICONST.INDEXKEYCHANGED)
> = SYS.ODCICONST.INDEXKEYCHANGED) ) OR
> (BITAND( ENV.ENVFLAGS, SYS.ODCICONST.ROWMIGRATION)
> <> SYS.ODCICONST.ROWMIGRATION) ) THEN
> IF (RID IS NOT NULL) THEN
> STMT := 'delete from '||TOPOLOGY||'_relation$ where ' ||
498c501
< EXECUTE IMMEDIATE stmt USING feature_L_id, feature_id;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_L_ID, FEATURE_ID;
502,505c505,508
< -- PARTITION OR NON PARTITION CASE
< IF (ia.IndexPartition IS NULL ) THEN
< -- insert the rowid, feature id into the index table
< stmt := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
---
>
> IF (IA.INDEXPARTITION IS NULL ) THEN
>
> STMT := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
508c511
< EXECUTE IMMEDIATE stmt INTO idx_tab USING ia.IndexSchema, ia.IndexName;
---
> EXECUTE IMMEDIATE STMT INTO IDX_TAB USING IA.INDEXSCHEMA, IA.INDEXNAME;
510c513
< stmt := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
---
> STMT := 'select SDO_INDEX_TABLE from mdsys.all_sdo_index_metadata ' ||
514,515c517,518
< EXECUTE IMMEDIATE stmt INTO idx_tab USING
< ia.IndexSchema, ia.IndexName, ia.IndexPartition;
---
> EXECUTE IMMEDIATE STMT INTO IDX_TAB USING
> IA.INDEXSCHEMA, IA.INDEXNAME, IA.INDEXPARTITION;
518,528c521
< /* see if this tg_is is referred to by any other layer in the relation
< table for each parent layer that has this layer as the child layer
< count the rows in relation tables pointing to this tg_id
< if count > 0 then this violates the hierarchical constraint */
< -- do this only if this is not a row migration case
< IF ( ( (bitand( env.EnvFlags, SYS.ODCIConst.RowMigration)
< = SYS.ODCIConst.RowMigration) AND
< (bitand( env.EnvFlags, SYS.ODCIConst.IndexKeyChanged)
< = SYS.ODCIConst.IndexKeyChanged) ) OR
< (bitand( env.EnvFlags, SYS.ODCIConst.RowMigration)
< <> SYS.ODCIConst.RowMigration) ) THEN
---
>
530,531c523,534
< IF (rid IS NOT NULL) THEN
< EXECUTE IMMEDIATE
---
>
>
>
> IF ( ( (BITAND( ENV.ENVFLAGS, SYS.ODCICONST.ROWMIGRATION)
> = SYS.ODCICONST.ROWMIGRATION) AND
> (BITAND( ENV.ENVFLAGS, SYS.ODCICONST.INDEXKEYCHANGED)
> = SYS.ODCICONST.INDEXKEYCHANGED) ) OR
> (BITAND( ENV.ENVFLAGS, SYS.ODCICONST.ROWMIGRATION)
> <> SYS.ODCICONST.ROWMIGRATION) ) THEN
>
> IF (RID IS NOT NULL) THEN
> EXECUTE IMMEDIATE
533,534c536,537
< '(a '||topology||'_REL_LID$ ) */ count(*) ' ||
< 'from mdsys.user_sdo_topo_info b, ' || topology || '_RELATION$ a ' ||
---
> '(a '||TOPOLOGY||'_REL_LID$ ) */ count(*) ' ||
> 'from mdsys.user_sdo_topo_info b, ' || TOPOLOGY || '_RELATION$ a ' ||
539,541c542,544
< INTO cnt USING oldval.topology_id, abs(oldval.tg_layer_id), oldval.tg_id;
<
< IF (cnt > 0) THEN
---
> INTO CNT USING OLDVAL.TOPOLOGY_ID, ABS(OLDVAL.TG_LAYER_ID), OLDVAL.TG_ID;
>
> IF (CNT > 0) THEN
543,549c546,552
< /* this is hierarchical case */
< /* setup the variables for WM check bug 9206217*/
< isVersioned := 0;
< ver_status := NULL;
< idx_columns := ia.IndexCols;
< table_name := idx_columns(1).TableName;
< table_name := substr(table_name, 1, length(table_name)-3);
---
>
>
> ISVERSIONED := 0;
> VER_STATUS := NULL;
> IDX_COLUMNS := IA.INDEXCOLS;
> TABLE_NAME := IDX_COLUMNS(1).TABLENAME;
> TABLE_NAME := SUBSTR(TABLE_NAME, 1, LENGTH(TABLE_NAME)-3);
554,555c557,558
< INTO isVersioned
< USING idx_columns(1).tableschema, table_name;
---
> INTO ISVERSIONED
> USING IDX_COLUMNS(1).TABLESCHEMA, TABLE_NAME;
557c560
< IF (isVersioned > 0) THEN
---
> IF (ISVERSIONED > 0) THEN
562c565
< INTO ver_status USING idx_columns(1).tableschema, table_name;
---
> INTO VER_STATUS USING IDX_COLUMNS(1).TABLESCHEMA, TABLE_NAME;
564,565c567,568
< /* need more checks if this is version enabled topology */
< EXECUTE IMMEDIATE
---
>
> EXECUTE IMMEDIATE
568c571
< INTO old_sp;
---
> INTO OLD_SP;
569a573,575
> EXECUTE IMMEDIATE
> 'select wmsys.lt.getworkspace from SYS.DUAL' INTO OLD_WS;
>
571,574c577
< 'select wmsys.lt.getworkspace from SYS.DUAL' INTO old_ws;
<
< EXECUTE IMMEDIATE
< 'select parent_workspace, parent_savepoint' ||
---
> 'select parent_workspace, parent_savepoint' ||
576,577c579,580
< ' where workspace = dbms_wm.getworkspace '
< INTO parent_ws, parent_sp;
---
> ' where workspace = dbms_wm.getworkspace '
> INTO PARENT_WS, PARENT_SP;
579c582
< IF (parent_sp IS NOT NULL) THEN
---
> IF (PARENT_SP IS NOT NULL) THEN
583c586
< USING parent_ws, parent_sp;
---
> USING PARENT_WS, PARENT_SP;
586,587c589,590
< cnt := -1;
< EXECUTE IMMEDIATE 'select count(*) from ' || topology ||
---
> CNT := -1;
> EXECUTE IMMEDIATE 'select count(*) from ' || TOPOLOGY ||
589c592
< INTO cnt USING abs(feature_L_id), feature_id;
---
> INTO CNT USING ABS(FEATURE_L_ID), FEATURE_ID;
593,595c596,598
< USING old_ws;
<
< IF (old_sp <> 'LATEST') THEN
---
> USING OLD_WS;
>
> IF (OLD_SP <> 'LATEST') THEN
598c601
< USING old_sp;
---
> USING OLD_SP;
601,602c604,605
< IF ( (cnt = 0) AND (ver_status <> 'DV') ) THEN
< mderr.raise_md_error('MD', 'SDO', -13199,
---
> IF ( (CNT = 0) AND (VER_STATUS <> 'DV') ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
604c607
< RETURN SYS.ODCIConst.Error;
---
> RETURN SYS.ODCICONST.ERROR;
608,609c611,612
< BEGIN
< mderr.raise_md_error('MD', 'SDO', -13199,
---
> BEGIN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
611c614
< RETURN SYS.ODCIConst.Error;
---
> RETURN SYS.ODCICONST.ERROR;
613c616
< END IF; /* isVersioned */
---
> END IF;
615,616c618,619
< END IF; /* cnt > 0 */
< END IF; /* RID is not NULL */
---
> END IF;
> END IF;
619,622c622,625
< -- delete from the index table
< IF (rid is not NULL) THEN
< idx_tab := ia.IndexSchema||'.'||idx_tab;
< stmt := 'DELETE '|| SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(idx_tab) ||
---
>
> IF (RID IS NOT NULL) THEN
> IDX_TAB := IA.INDEXSCHEMA||'.'||IDX_TAB;
> STMT := 'DELETE '|| SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(IDX_TAB) ||
625c628
< EXECUTE IMMEDIATE stmt USING feature_id, rid;
---
> EXECUTE IMMEDIATE STMT USING FEATURE_ID, RID;
628c631
< RETURN SYS.ODCIConst.Success;
---
> RETURN SYS.ODCICONST.SUCCESS;
631,636c634,639
< FUNCTION isversioned(topology IN VARCHAR2) return integer IS
< topo_name varchar2(130);
< owner varchar2(130);
< stmt varchar2(200);
< versionedTopology integer;
< owmInstalled integer;
---
> FUNCTION ISVERSIONED(TOPOLOGY IN VARCHAR2) RETURN INTEGER IS
> TOPO_NAME VARCHAR2(130);
> OWNER VARCHAR2(130);
> STMT VARCHAR2(200);
> VERSIONEDTOPOLOGY INTEGER;
> OWMINSTALLED INTEGER;
638,640c641,643
< mdsys.SDO_TOPO_METADATA.extract_topo_owner(
< nls_upper(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(topology)), owner,topo_name);
< versionedTopology := 0;
---
> MDSYS.SDO_TOPO_METADATA.EXTRACT_TOPO_OWNER(
> NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TOPOLOGY)), OWNER,TOPO_NAME);
> VERSIONEDTOPOLOGY := 0;
642c645
< SELECT MDSYS.SDO_OWM_INSTALLED INTO owmInstalled FROM SYS.DUAL;
---
> SELECT MDSYS.SDO_OWM_INSTALLED INTO OWMINSTALLED FROM SYS.DUAL;
644,645c647,648
< IF ( owmInstalled > 0 ) THEN
< stmt := ' select count(*) ' ||
---
> IF ( OWMINSTALLED > 0 ) THEN
> STMT := ' select count(*) ' ||
648,649c651,652
< EXECUTE IMMEDIATE stmt INTO versionedTopology
< USING owner, SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(topo_name) || '_NODE$';
---
> EXECUTE IMMEDIATE STMT INTO VERSIONEDTOPOLOGY
> USING OWNER, SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(TOPO_NAME) || '_NODE$';
652c655
< RETURN versionedTopology;
---
> RETURN VERSIONEDTOPOLOGY;
655,656c658
< END sdo_tpidx;
<
---
> END SDO_TPIDX;
12c12
< PARAMETERS (
---
> PARAMETERS(
29c29
< PARAMETERS (
---
> PARAMETERS(
35,36c35,36
< FUNCTION OTLOCINREGION(LONGITUDE IN NUMBER,
< LATITUDE IN NUMBER,
---
> FUNCTION OTLOCINREGION(LONGITUDE IN NUMBER,
> LATITUDE IN NUMBER,
44c44
< PARAMETERS (
---
> PARAMETERS(
58c58
< NUM_LOC_QUEUES IN INTEGER);
---
> NUM_LOC_QUEUES IN INTEGER);
82,89c82,102
< PROCEDURE LOG_MSG (LOG_TABLE IN VARCHAR2,
< MSG_LVL IN VARCHAR2,
< MSG IN VARCHAR2)
< AS
< STMT VARCHAR2(1000);
< BEGIN
< STMT := 'INSERT INTO ' || LOG_TABLE || 'VALUES (:1, :2, :3)';
< EXECUTE IMMEDIATE STMT USING MSG_LVL, MSG, CURRENT_TIMESTAMP();
---
> PROCEDURE LOG_MSG(LOG_TABLE IN VARCHAR2,
> MSG_LVL IN VARCHAR2,
> MSG IN VARCHAR2)
> AS
> STMT VARCHAR2(1000);
> BEGIN
> STMT := 'INSERT INTO ' || LOG_TABLE ||
> ' VALUES(:1, :2, :3)';
>
> BEGIN
> EXECUTE IMMEDIATE STMT USING MSG_LVL, MSG, CURRENT_TIMESTAMP();
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> RAISE;
> END;
93c106,107
< PROCEDURE LOG_DEBUG(TRACKING_SET_NAME IN VARCHAR2, MSG IN VARCHAR2)
---
> PROCEDURE LOG_DEBUG(TRACKING_SET_NAME IN VARCHAR2,
> MSG IN VARCHAR2)
97c111,116
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
102c121,122
< PROCEDURE LOG_ERROR(LOG_TABLE IN VARCHAR2, MSG IN VARCHAR2)
---
> PROCEDURE LOG_ERROR(LOG_TABLE IN VARCHAR2,
> MSG IN VARCHAR2)
108c128,129
< PROCEDURE LOG_INFO(LOG_TABLE IN VARCHAR2, MSG IN VARCHAR2)
---
> PROCEDURE LOG_INFO(LOG_TABLE IN VARCHAR2,
> MSG IN VARCHAR2)
113c134
<
---
>
119c140
< PROCEDURE PERFORM_PREPROCESSING(TRACKING_SET_NAME IN VARCHAR2,
---
> PROCEDURE PERFORM_PREPROCESSING(TRACKING_SET_NAME IN VARCHAR2,
126c147
< TABLE_NAME_NA VARCHAR2(128);
---
> TABLE_NAME_NA VARCHAR2(128);
136a158,159
> QUEUE_ALREADY_EXISTS EXCEPTION;
> PRAGMA EXCEPTION_INIT(QUEUE_ALREADY_EXISTS, -24006);
138c161,166
< TABLE_NAME :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> TABLE_NAME :=
145,152c173,188
< EXECUTE IMMEDIATE STMT;
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< SYS.DBMS_SYSTEM.KSDWRT(
< SYS.DBMS_SYSTEM.TRACE_FILE,
< 'EXCEPTION[sdo_trkr(' || STMT || ')]: ' || SQLERRM);
< RAISE;
---
> EXECUTE IMMEDIATE STMT;
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN QUEUE_ALREADY_EXISTS THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> RAISE;
154,157c190,195
<
< BEGIN
< STMT := 'CREATE TABLE ' || TABLE_NAME ||
< '(message_level varchar2(1), message varchar2(512), ts TIMESTAMP WITH TIME ZONE)';
---
>
> BEGIN
> STMT := 'CREATE TABLE ' || TABLE_NAME || '(' ||
> 'message_level varchar2(1), ' ||
> 'message varchar2(512), ' ||
> 'ts TIMESTAMP WITH TIME ZONE)';
159,164c197,205
< EXCEPTION
< WHEN OTHERS THEN
< SYS.DBMS_SYSTEM.KSDWRT(
< SYS.DBMS_SYSTEM.TRACE_FILE,
< 'EXCEPTION[sdo_trkr(' || STMT || ')]: ' || SQLERRM);
< RAISE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> RAISE;
168c209
<
---
>
173,178c214,227
< EXECUTE IMMEDIATE STMT;
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
> EXECUTE IMMEDIATE STMT;
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')4]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
180,183c229,237
<
< BEGIN
< STMT := 'CREATE TABLE ' || TABLE_NAME ||
< '(object_id NUMBER, region_id NUMBER, time TIMESTAMP, x NUMBER, y NUMBER, state VARCHAR2(8))';
---
>
> BEGIN
> STMT := 'CREATE TABLE ' || TABLE_NAME || '(' ||
> 'object_id NUMBER, ' ||
> 'region_id NUMBER, ' ||
> 'time TIMESTAMP, ' ||
> 'x NUMBER, ' ||
> 'y NUMBER, ' ||
> 'state VARCHAR2(8))';
185,189c239,250
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')5]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
>
> LOG_ERROR(LOG_TABLE,
> 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
196,200c257,270
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')6]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
>
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
204,205c274,277
< STMT := 'CREATE TABLE '|| TABLE_NAME || '(object_id NUMBER,' ||
< ' time TIMESTAMP, trajectory MDSYS.SDO_GEOMETRY)';
---
> STMT := 'CREATE TABLE '|| TABLE_NAME || '(' ||
> 'object_id NUMBER, ' ||
> 'time TIMESTAMP, ' ||
> 'trajectory MDSYS.SDO_GEOMETRY)';
207,211c279,290
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')7]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
>
> LOG_ERROR(LOG_TABLE,
> 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
214c293
< TABLE_NAME :=
---
> TABLE_NAME :=
219,223c298,311
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')8]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
>
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
226c314
< CONSTRAINT_NAME :=
---
> CONSTRAINT_NAME :=
230,232c318,321
< STMT := 'CREATE TABLE ' || TABLE_NAME ||
< '(region_id NUMBER, geometry MDSYS.SDO_GEOMETRY, CONSTRAINT ' ||
< CONSTRAINT_NAME || ' PRIMARY KEY(region_id))';
---
> STMT := 'CREATE TABLE ' || TABLE_NAME || '(' ||
> 'region_id NUMBER, ' ||
> 'geometry MDSYS.SDO_GEOMETRY, ' ||
> 'CONSTRAINT ' || CONSTRAINT_NAME || ' PRIMARY KEY(region_id))';
234,238c323,333
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')9]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE,
> 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
241c336
< TABLE_NAME_NA :=
---
> TABLE_NAME_NA :=
246,255c341,356
< STMT := 'DELETE FROM mdsys.user_sdo_geom_metadata WHERE '
< || 'table_name = NLS_UPPER(:1)';
< EXECUTE IMMEDIATE STMT USING TABLE_NAME_NA;
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'DELETE FROM user_sdo_geom_metadata: ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
< END;
<
---
> STMT := 'DELETE FROM mdsys.user_sdo_geom_metadata ' ||
> 'WHERE table_name = NLS_UPPER(:1)';
> EXECUTE IMMEDIATE STMT USING TABLE_NAME_NA;
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')10]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE,
> 'DELETE FROM user_sdo_geom_metadata: ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
> END;
>
258,259c359,360
< MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5),
< MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5));
---
> MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5),
> MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5));
265c366,367
< STMT := 'INSERT INTO MDSYS.USER_SDO_GEOM_METADATA VALUES (:1, :2, :3, :4)';
---
> STMT := 'INSERT INTO MDSYS.USER_SDO_GEOM_METADATA ' ||
> 'VALUES(:1, :2, :3, :4)';
267,272c369,380
< NLS_UPPER(COLUMN_NAME), DIMINFO, SRID;
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'INSERT INTO user_sdo_geom_metadata: ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
> COLUMN_NAME, DIMINFO, SRID;
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')11]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE,
> 'INSERT INTO user_sdo_geom_metadata: ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
274c382
<
---
>
279,283c387,398
< EXCEPTION
< WHEN INDEX_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
< 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')6]: ' || SQLERRM); RAISE;
---
>
> EXCEPTION
> WHEN INDEX_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')12]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> RAISE;
287,288c402,404
< STMT := 'CREATE INDEX ' || IDX_NAME || ' ON ' || TABLE_NAME ||
< '(geometry) indextype is mdsys.spatial_index_v2';
---
> STMT := 'CREATE INDEX ' || IDX_NAME || ' ' ||
> 'ON ' || TABLE_NAME || '(geometry) ' ||
> 'indextype is mdsys.spatial_index_v2';
290,294c406,416
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'CREATE INDEX ' || IDX_NAME ||': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')13]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE,
> 'CREATE INDEX ' || IDX_NAME ||': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
301,305c423,435
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')14]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
309c439
< CONSTRAINT_NAME :=
---
> CONSTRAINT_NAME :=
312,314c442,447
< STMT := 'CREATE TABLE ' || TABLE_NAME || '(object_id NUMBER, ' ||
< ' region_id NUMBER, queue_no NUMBER, alert_when VARCHAR2(2), CONSTRAINT ' ||
< CONSTRAINT_NAME || ' PRIMARY KEY(object_id, region_id))';
---
> STMT := 'CREATE TABLE ' || TABLE_NAME || '(' ||
> 'object_id NUMBER, ' ||
> 'region_id NUMBER, ' ||
> 'queue_no NUMBER, ' ||
> 'alert_when VARCHAR2(2), ' ||
> 'CONSTRAINT ' || CONSTRAINT_NAME || ' PRIMARY KEY(object_id, region_id))';
316,320c449,459
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')15]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE,
> 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
323c462
< TABLE_NAME :=
---
> TABLE_NAME :=
328,332c467,479
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')16]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
336,337c483,485
< STMT := 'CREATE TABLE ' || TABLE_NAME ||
< '(num_loc_queues NUMBER, num_trkr_queues NUMBER)';
---
> STMT := 'CREATE TABLE ' || TABLE_NAME || '(' ||
> 'num_loc_queues NUMBER, ' ||
> 'num_trkr_queues NUMBER)';
339c487,489
< STMT := 'INSERT INTO ' || TABLE_NAME || ' VALUES(:1, :2)';
---
>
> STMT := 'INSERT INTO ' || TABLE_NAME ||
> ' VALUES(:1, :2)';
342,346c492,502
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE,
< 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')17]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE,
> 'CREATE TABLE ' || TABLE_NAME || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
351c507
< IF (ERROR_FLG) THEN
---
> IF (ERROR_FLG) THEN
354,355c510,511
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Errors found in sdo_trkr.create_tracking_set: preprocessing');
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.perform_preprocessing: preprocessing');
369c525,530
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
378,382c539,551
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')18]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
390,394c559,571
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')19]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
402,406c579,591
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')20]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
414,418c599,611
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')21]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
420c613
<
---
>
426,430c619,631
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')22]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
438,442c639,651
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN NULL;
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')23]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> LOG_ERROR(LOG_TABLE, STMT || ': ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
446,447c655,656
< IF (ERROR_FLG) THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> IF (ERROR_FLG) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
451c660
<
---
>
463c672,677
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
469c683
< TQ_NAME :=
---
> TQ_NAME :=
471,473d684
< PQ_NAME :=
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_proc_q_' || I);
<
474a686,688
>
> PQ_NAME :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_proc_q_' || I);
482c696
< LQ_NAME :=
---
> LQ_NAME :=
484d697
<
490c703
< NQ_NAME :=
---
> NQ_NAME :=
494,497d706
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Start queues: ' || SUBSTR(SQLERRM, 1, 256));
< STOP_QUEUES(TRACKING_SET_NAME, NUM_TRKR_QUEUES, NUM_LOC_QUEUES);
499,500c708,717
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Errors found in sdo_trkr.start_tracking_set: start queues');
---
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')24]: ' || SQLERRM);
>
> LOG_ERROR(LOG_TABLE, 'Start queues: ' || SUBSTR(SQLERRM, 1, 256));
> STOP_QUEUES(TRACKING_SET_NAME, NUM_TRKR_QUEUES, NUM_LOC_QUEUES);
>
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.start_tracking_set: start queues');
511a729,730
> QUEUE_EXISTS EXCEPTION;
> PRAGMA EXCEPTION_INIT(QUEUE_EXISTS, -24001);
513c732,737
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
520c744
<
---
>
523c747
< T_QT :=
---
> T_QT :=
525c749
< P_QT :=
---
> P_QT :=
533c757
<
---
>
547c771
<
---
>
553c777
< N_QT :=
---
> N_QT :=
562a787,789
> WHEN QUEUE_EXISTS THEN
> NULL;
>
563a791,793
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')25]: ' || SQLERRM);
>
567c797
< PERFORM_POSTPROCESSING(TRACKING_SET_NAME);
---
> PERFORM_POSTPROCESSING(TRACKING_SET_NAME);
569,570c799,800
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Errors found in sdo_trkr.create_tracking_set: create queue tables');
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.create_queue_tables: create queue tables');
585a816,817
> QUEUE_ALREADY_EXISTS EXCEPTION;
> PRAGMA EXCEPTION_INIT(QUEUE_ALREADY_EXISTS, -24006);
587c819,824
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
595c832
< T_Q :=
---
> T_Q :=
638a876,878
> WHEN QUEUE_ALREADY_EXISTS THEN
> NULL;
>
639a880,882
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')26]: ' || SQLERRM);
>
643c886
< PERFORM_POSTPROCESSING(TRACKING_SET_NAME);
---
> PERFORM_POSTPROCESSING(TRACKING_SET_NAME);
645c888
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
658c901
< N_Q VARCHAR2(130);
---
> N_Q VARCHAR2(130);
660c903,908
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
662c910
<
---
>
675,678c923,929
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Error dropping tracker and process queues');
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')27]: ' || SQLERRM);
> LOG_ERROR(LOG_TABLE, 'Error dropping tracker and process queues');
> ERROR_FLG := TRUE;
690,693c941,947
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Error dropping location queues');
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')28]: ' || SQLERRM);
> LOG_ERROR(LOG_TABLE, 'Error dropping location queues');
> ERROR_FLG := TRUE;
698c952
< BEGIN
---
> BEGIN
702,705c956,962
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Error dropping notification queue');
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')29]: ' || SQLERRM);
> LOG_ERROR(LOG_TABLE, 'Error dropping notification queue');
> ERROR_FLG := TRUE;
709,710c966,967
< IF (ERROR_FLG) THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> IF (ERROR_FLG) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
726c983,988
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
728c990
<
---
>
740,743c1002,1008
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Error dropping tracker and process queue tables');
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')30]: ' || SQLERRM);
> LOG_ERROR(LOG_TABLE, 'Error dropping tracker and process queue tables');
> ERROR_FLG := TRUE;
755,758c1020,1026
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Error dropping location queue tables');
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')31]: ' || SQLERRM);
> LOG_ERROR(LOG_TABLE, 'Error dropping location queue tables');
> ERROR_FLG := TRUE;
768,771c1036,1042
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Error dropping notification queue table');
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')32]: ' || SQLERRM);
> LOG_ERROR(LOG_TABLE, 'Error dropping notification queue table');
> ERROR_FLG := TRUE;
775,776c1046,1047
< IF (ERROR_FLG) THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> IF (ERROR_FLG) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
791c1062,1067
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
798a1075,1076
> DBMS_AQADM.STOP_QUEUE(QUEUE_NAME => T_Q, WAIT => TRUE);
>
801,802d1078
<
< DBMS_AQADM.STOP_QUEUE(QUEUE_NAME => T_Q, WAIT => TRUE);
846a1123,1127
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
862,863c1143,1144
< IF (PAYLOAD.ARR(I).ALERT_WHEN LIKE 'T%') THEN
< TABLE_NAME :=
---
> IF (PAYLOAD.ARR(I).ALERT_WHEN LIKE 'T%') THEN
> TABLE_NAME :=
866,867c1147,1153
< STMT := 'SELECT /*+ RESULT_CACHE */ alert_when FROM ' || TABLE_NAME ||
< ' WHERE object_id=:1 AND region_id=:2';
---
> STMT := 'SELECT /*+ RESULT_CACHE */ alert_when ' ||
> 'FROM ' || TABLE_NAME || ' ' ||
> 'WHERE object_id = :1 AND region_id = :2';
>
> BEGIN
> EXECUTE IMMEDIATE STMT INTO ALERT
> USING PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID;
869,870c1155,1165
< EXECUTE IMMEDIATE STMT INTO ALERT
< USING PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID;
---
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> ALERT := NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')33]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[' || STMT || ']');
> RAISE;
> END;
873,875c1168,1172
< IF ((ISINSIDE) AND (ALERT !='TO')) THEN
< STMT := 'UPDATE ' || TABLE_NAME || ' SET alert_when=' || '''TO''' ||
< ' WHERE object_id=:1 AND region_id=:2';
---
> IF ((ISINSIDE) AND (ALERT != 'TO')) THEN
> STMT := 'UPDATE ' || TABLE_NAME ||
> ' SET alert_when = ' || '''TO''' ||
> ' WHERE object_id = :1 ' ||
> 'AND region_id = :2';
877c1174,1175
< EXECUTE IMMEDIATE STMT USING PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID;
---
> EXECUTE IMMEDIATE STMT
> USING PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID;
879,881c1177,1181
< ELSIF ((NOT ISINSIDE) AND (ALERT !='TI')) THEN
< STMT := 'UPDATE ' || TABLE_NAME || ' SET alert_when=' || '''TI''' ||
< ' WHERE object_id=:1 AND region_id=:2';
---
> ELSIF ((NOT ISINSIDE) AND (ALERT != 'TI')) THEN
> STMT := 'UPDATE ' || TABLE_NAME ||
> ' SET alert_when = ' || '''TI''' ||
> ' WHERE object_id = :1 ' ||
> 'AND region_id = :2';
883c1183,1184
< EXECUTE IMMEDIATE STMT USING PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID;
---
> EXECUTE IMMEDIATE STMT
> USING PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID;
893c1194
< ELSE
---
> ELSE
898c1199
< PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID, PAYLOAD.ARR(I).TIME,
---
> PAYLOAD.ARR(I).OBJECT_ID, PAYLOAD.ARR(I).REGION_ID, PAYLOAD.ARR(I).TIME,
908,913c1209,1218
< EXCEPTION
< WHEN TIMEOUT_OR_EOF THEN NULL;
< WHEN OTHERS THEN
< LOG_TABLE :=
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
< LOG_ERROR(LOG_TABLE, 'Error processing process messages: '|| SUBSTR(SQLERRM, 1, 256));
---
>
> EXCEPTION
> WHEN TIMEOUT_OR_EOF THEN
> NULL;
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')34]: ' || SQLERRM);
> LOG_TABLE :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
> LOG_ERROR(LOG_TABLE, 'Error processing process messages: '|| SUBSTR(SQLERRM, 1, 256));
932a1238
> STMT VARCHAR2(1000);
934c1240
< STMTG VARCHAR2(1000);
---
> STMTG VARCHAR2(1000);
942c1248
< T_Q VARCHAR2(130);
---
> T_Q VARCHAR2(130);
950a1257
> JOB_NAME VARCHAR2(130);
951a1259,1265
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> JOB_NAME :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_TRACKING_REGIONS');
953,954c1267,1268
< SYS_CONTEXT('USERENV', 'CURRENT_USER'),
< (TRACKING_SET_NAME || '_TRACKING_REGIONS'),
---
> SYS_CONTEXT('USERENV', 'CURRENT_USER'),
> JOB_NAME,
960c1274
<
---
>
963,964c1277,1278
<
< TABLE_NAME_R :=
---
>
> TABLE_NAME_R :=
968,972c1282,1287
< STMTD :=
< 'SELECT region_id, geometry FROM ' || TABLE_NAME_R || ' ' ||
< 'WHERE region_id IN '||
< '(SELECT DISTINCT region_id FROM ' || TABLE_NAME ||
< ' WHERE queue_no='|| SYS.DBMS_ASSERT.ENQUOTE_LITERAL(QNO) || ')';
---
> STMTD := 'SELECT region_id, geometry ' ||
> 'FROM ' || TABLE_NAME_R || ' ' ||
> 'WHERE region_id IN '||
> '(SELECT DISTINCT region_id ' ||
> ' FROM ' || TABLE_NAME ||
> ' WHERE queue_no = '|| SYS.DBMS_ASSERT.ENQUOTE_LITERAL(QNO) || ')';
975c1290
< LOOP
---
> LOOP
984,985c1299,1302
< STMTG := 'SELECT geometry FROM ' || TABLE_NAME_R || ' WHERE region_id = :1';
<
---
> STMTG := 'SELECT geometry ' ||
> 'FROM ' || TABLE_NAME_R || ' ' ||
> 'WHERE region_id = :1';
>
987,988c1304,1307
< STMTC := ' SELECT COUNT(*) FROM ' || TABLE_NAME ||
< ' WHERE object_id =:1 AND region_id=:2';
---
> STMTC := 'SELECT COUNT(*) ' ||
> 'FROM ' || TABLE_NAME || ' ' ||
> 'WHERE object_id = :1 ' ||
> 'AND region_id = :2';
991c1310,1312
< STMTD := 'DELETE FROM ' || TABLE_NAME || ' WHERE object_id=:1 AND region_id=:2';
---
> STMTD := 'DELETE FROM ' || TABLE_NAME || ' ' ||
> 'WHERE object_id = :1 ' ||
> 'AND region_id = :2';
994c1315,1316
< STMTI := 'INSERT INTO ' || TABLE_NAME || ' VALUES(:1, :2, :3, :4)';
---
> STMTI := 'INSERT INTO ' || TABLE_NAME || ' ' ||
> 'VALUES(:1, :2, :3, :4)';
997,998c1319,1322
< STMTU := 'UPDATE ' || TABLE_NAME ||
< ' SET alert_when=:1 WHERE object_id=:2 AND region_id=:3';
---
> STMTU := 'UPDATE ' || TABLE_NAME || ' ' ||
> 'SET alert_when = :1 ' ||
> 'WHERE object_id = :2 ' ||
> 'AND region_id = :3';
1008c1332
< P_Q :=
---
> P_Q :=
1046c1370
<
---
>
1049c1373
< END IF;
---
> END IF;
1067c1391
< EXECUTE IMMEDIATE STMTI
---
> EXECUTE IMMEDIATE STMTI
1073c1397
< EXECUTE IMMEDIATE STMTU
---
> EXECUTE IMMEDIATE STMTU
1091,1098d1414
< EXCEPTION
< WHEN OTHERS THEN
< BEGIN
< LOG_TABLE :=
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
<
< LOG_ERROR(LOG_TABLE,
< 'tracker/process dequeue: ' || SUBSTR(SQLERRM, 1, 256));
1100,1111c1416,1437
< OPEN R_CURSOR FOR
< 'SELECT region_id FROM ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker') ||
< ' WHERE queue_no=' || SYS.DBMS_ASSERT.ENQUOTE_LITERAL(QNO);
<
< LOOP
< FETCH R_CURSOR INTO RID;
< EXIT WHEN R_CURSOR%NOTFOUND;
< SDO_TRKR.OTUNLOADINMEMREGIONS(RID);
< END LOOP;
< CLOSE R_CURSOR;
< END;
---
> EXCEPTION
> WHEN OTHERS THEN
> BEGIN
> LOG_TABLE :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
>
> LOG_ERROR(LOG_TABLE,
> 'tracker/process dequeue: ' || SUBSTR(SQLERRM, 1, 256));
>
> STMT := 'SELECT region_id ' ||
> 'FROM ' ||
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker') ||
> ' WHERE queue_no=' || SYS.DBMS_ASSERT.ENQUOTE_LITERAL(QNO);
> OPEN R_CURSOR FOR STMT;
> LOOP
> FETCH R_CURSOR INTO RID;
> EXIT WHEN R_CURSOR%NOTFOUND;
>
> SDO_TRKR.OTUNLOADINMEMREGIONS(RID);
> END LOOP;
> CLOSE R_CURSOR;
> END;
1121,1122c1447,1448
< PAYLOAD_LOC LOCATION_MSG_PKD;
< MSG LOCATION_MSG;
---
> PAYLOAD_LOC MDSYS.LOCATION_MSG_PKD;
> MSG MDSYS.LOCATION_MSG;
1127a1454
> STMT VARCHAR2(1000);
1138a1466
> JOB_NAME VARCHAR2(130);
1139a1468,1474
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> JOB_NAME :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_TRACKING_REGIONS');
1141,1142c1476,1477
< SYS_CONTEXT('USERENV', 'CURRENT_USER'),
< (TRACKING_SET_NAME || '_TRACKING_REGIONS'),
---
> SYS_CONTEXT('USERENV', 'CURRENT_USER'),
> JOB_NAME,
1149c1484
< TABLE1_NAME :=
---
> TABLE1_NAME :=
1157c1492
< L_Q :=
---
> L_Q :=
1186,1191c1521,1526
< OPEN R_CURSOR FOR
< 'SELECT tr.region_id, t.queue_no, t.alert_when ' ||
< 'FROM ' || TABLE1_NAME || ' tr, ' || TABLE2_NAME || ' t ' ||
< 'WHERE t.object_id = ' || SYS.DBMS_ASSERT.ENQUOTE_LITERAL(OUT_REC.OBJECT_ID) ||
< ' AND t.region_id=tr.region_id';
<
---
> STMT := 'SELECT tr.region_id, t.queue_no, t.alert_when ' ||
> 'FROM ' || TABLE1_NAME || ' tr, ' || TABLE2_NAME || ' t ' ||
> 'WHERE t.object_id = ' ||
> SYS.DBMS_ASSERT.ENQUOTE_LITERAL(OUT_REC.OBJECT_ID) ||
> ' AND t.region_id = tr.region_id';
> OPEN R_CURSOR FOR STMT;
1206c1541
< IF ((ARR(I).ARR.COUNT) > 0) THEN
---
> IF ((ARR(I).ARR.COUNT) > 0) THEN
1220,1224d1554
< EXCEPTION
< WHEN OTHERS THEN
< BEGIN
< LOG_TABLE :=
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
1226,1228c1556,1566
< LOG_ERROR(LOG_TABLE,
< 'location dequeue: ' || SUBSTR(SQLERRM, 1, 256));
< END;
---
> EXCEPTION
> WHEN OTHERS THEN
> BEGIN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')35]: ' || SQLERRM);
> LOG_TABLE :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
>
> LOG_ERROR(LOG_TABLE,
> 'location dequeue: ' || SUBSTR(SQLERRM, 1, 256));
> END;
1237c1575,1580
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
1248c1591
< || TRACKING_SET_NAME || ''',' || I ||
---
> || TRACKING_SET_NAME || ''',' || I ||
1251c1594
< COMMENTS => 'Listening and dequeuing tracking
---
> COMMENTS => 'Listening and dequeuing tracking
1260a1604,1606
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')36]: ' || SQLERRM);
>
1264c1610
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
1275c1621,1626
< LOG_TABLE :=
---
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> LOG_TABLE :=
1285,1286c1636,1637
< JOB_ACTION => 'begin sdo_trkr.run_loc_deq('''
< || TRACKING_SET_NAME || ''',' || I ||
---
> JOB_ACTION => 'begin sdo_trkr.run_loc_deq('''
> || TRACKING_SET_NAME || ''',' || I ||
1289a1641
>
1295,1298d1646
< EXCEPTION
< WHEN OTHERS THEN
< LOG_ERROR(LOG_TABLE, 'Start location jobs: ' || SUBSTR(SQLERRM, 1, 256));
< STOP_LOC_JOBS(TRACKING_SET_NAME, NUM_LOC_QUEUES);
1300,1301c1648,1657
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Errors found in sdo_trkr.start_tracking_set: start location jobs');
---
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')37]: ' || SQLERRM);
>
> LOG_ERROR(LOG_TABLE, 'Start location jobs: ' || SUBSTR(SQLERRM, 1, 256));
> STOP_LOC_JOBS(TRACKING_SET_NAME, NUM_LOC_QUEUES);
>
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.start_tracking_set: start location jobs');
1310a1667,1671
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1323,1326c1684,1692
< EXCEPTION
< WHEN JOB_NOT_RUNNING THEN NULL;
< WHEN OTHERS THEN
< RAISE;
---
>
> EXCEPTION
> WHEN JOB_NOT_RUNNING THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')38]: ' || SQLERRM);
> RAISE;
1332,1333c1698,1703
< EXCEPTION
< WHEN OTHERS THEN NULL;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')39]: ' || SQLERRM);
> NULL;
1341a1712,1713
> JOB_NAME VARCHAR2(128);
> FULL_NAME VARCHAR2(260);
1344a1717,1721
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1348c1725,1728
< BEGIN
---
> JOB_NAME := SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_loc_job_' || I);
> FULL_NAME := USER || '.' || JOB_NAME;
>
> BEGIN
1351c1731
< NAME => USER || '.' || TRACKING_SET_NAME || '_loc_job_' || I);
---
> NAME => FULL_NAME);
1356,1360c1736,1745
< JOB_NAME => USER || '.' || TRACKING_SET_NAME || '_loc_job_' || I);
< EXCEPTION
< WHEN JOB_NOT_RUNNING THEN NULL;
< WHEN OTHERS THEN
< RAISE;
---
> JOB_NAME => FULL_NAME);
>
> EXCEPTION
> WHEN JOB_NOT_RUNNING THEN
> NULL;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')40]: ' || SQLERRM);
> RAISE;
1365,1367c1750,1756
< JOB_NAME => USER|| '.' || TRACKING_SET_NAME || '_loc_job_'|| I);
< EXCEPTION
< WHEN OTHERS THEN NULL;
---
> JOB_NAME => FULL_NAME);
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')41]: ' || SQLERRM);
> NULL;
1377a1767,1770
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
1380,1381c1773,1774
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< ' Exceeded maximum allowed number of Tracker queues: 1000');
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> ' Exceeded maximum allowed number of Tracker queues: 1000');
1385,1386c1778,1779
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< ' Exceeded maximum allowed number of Location queues: 100');
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> ' Exceeded maximum allowed number of Location queues: 100');
1388,1389c1781,1782
<
< LOG_TABLE :=
---
>
> LOG_TABLE :=
1395a1789
>
1396a1791
>
1397a1793
>
1413a1810,1814
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1416c1817
< BEGIN
---
> BEGIN
1417a1819,1832
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')42]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'sdo_trkr.start_tracking_set: fetching queue counts');
> END;
>
> BEGIN
1419,1425c1834,1844
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Invalid tracking set name: ' || TRACKING_SET_NAME);
< WHEN OTHERS THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'sdo_trkr.start_tracking_set: fetching queue counts');
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')43]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'sdo_trkr.start_tracking_set: fetching queue counts');
1428c1847
< LOG_TABLE :=
---
> LOG_TABLE :=
1433c1852
< 'WHERE job_name LIKE ' ||
---
> 'WHERE job_name LIKE ' ||
1435,1436c1854,1855
< EXECUTE IMMEDIATE STMT INTO CNT;
<
---
> EXECUTE IMMEDIATE STMT INTO CNT;
>
1438c1857
< IF (CNT > 0) THEN
---
> IF (CNT > 0) THEN
1444c1863
<
---
>
1450c1869
< BEGIN
---
> BEGIN
1452,1457c1871,1880
< EXCEPTION
< WHEN OTHERS THEN
<
<
< STOP_TRKR_JOBS(TRACKING_SET_NAME, NUM_TRKR_QUEUES);
< START_TRKR_JOBS(TRACKING_SET_NAME, NUM_TRKR_QUEUES);
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')44]: ' || SQLERRM);
>
>
>
> STOP_TRKR_JOBS(TRACKING_SET_NAME, NUM_TRKR_QUEUES);
> START_TRKR_JOBS(TRACKING_SET_NAME, NUM_TRKR_QUEUES);
1460c1883
< BEGIN
---
> BEGIN
1462,1467c1885,1894
< EXCEPTION
< WHEN OTHERS THEN
<
<
< STOP_LOC_JOBS(TRACKING_SET_NAME, NUM_LOC_QUEUES);
< START_LOC_JOBS(TRACKING_SET_NAME, NUM_LOC_QUEUES, NUM_TRKR_QUEUES);
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')45]: ' || SQLERRM);
>
>
>
> STOP_LOC_JOBS(TRACKING_SET_NAME, NUM_LOC_QUEUES);
> START_LOC_JOBS(TRACKING_SET_NAME, NUM_LOC_QUEUES, NUM_TRKR_QUEUES);
1485a1913,1917
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1488c1920
< BEGIN
---
> BEGIN
1489a1922,1934
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')46]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.stop_tracking_set: fetching queue counts');
> END;
>
> BEGIN
1491,1497c1936,1945
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Invalid tracking set name: ' || TRACKING_SET_NAME);
< WHEN OTHERS THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Errors found in sdo_trkr.stop_tracking_set: fetching queue counts');
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')47]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.stop_tracking_set: fetching queue counts');
1500c1948
< LOG_TABLE :=
---
> LOG_TABLE :=
1506,1507c1954,1959
< EXCEPTION
< WHEN OTHERS THEN NULL;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')48]: ' || SQLERRM);
> NULL;
1512,1513c1964,1967
< EXCEPTION
< WHEN OTHERS THEN NULL;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> NULL;
1516c1970
< BEGIN
---
> BEGIN
1518,1523c1972,1981
< EXCEPTION
< WHEN OTHERS THEN
< LOG_TABLE :=
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
< LOG_ERROR(LOG_TABLE, 'Stop location queues: ' || SUBSTR(SQLERRM, 1, 256));
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')49]: ' || SQLERRM);
>
> LOG_TABLE :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_tracker_log');
> LOG_ERROR(LOG_TABLE, 'Stop location queues: ' || SUBSTR(SQLERRM, 1, 256));
> ERROR_FLG := TRUE;
1529,1530c1987,1988
< IF (ERROR_FLG) THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> IF (ERROR_FLG) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
1543a2002,2006
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1546c2009
< BEGIN
---
> BEGIN
1547a2011,2023
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')50]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.stop_tracking_set: fetching queue counts');
> END;
>
> BEGIN
1549,1555c2025,2034
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Invalid tracking set name: ' || TRACKING_SET_NAME);
< WHEN OTHERS THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Errors found in sdo_trkr.stop_tracking_set: fetching queue counts');
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')51]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Errors found in sdo_trkr.stop_tracking_set: fetching queue counts');
1558c2037
< LOG_TABLE :=
---
> LOG_TABLE :=
1562c2041
< BEGIN
---
> BEGIN
1564,1566c2043,2048
< EXCEPTION
< WHEN OTHERS THEN
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')52]: ' || SQLERRM);
> ERROR_FLG := TRUE;
1569c2051
< BEGIN
---
> BEGIN
1571,1573c2053,2058
< EXCEPTION
< WHEN OTHERS THEN
< ERROR_FLG := TRUE;
---
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')53]: ' || SQLERRM);
> ERROR_FLG := TRUE;
1576,1580c2061,2068
< BEGIN
< PERFORM_POSTPROCESSING(TRACKING_SET_NAME);
< EXCEPTION
< WHEN OTHERS THEN
< ERROR_FLG := TRUE;
---
> BEGIN
> PERFORM_POSTPROCESSING(TRACKING_SET_NAME);
>
> EXCEPTION
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')54]: ' || SQLERRM);
> ERROR_FLG := TRUE;
1585,1586c2073,2074
< IF (ERROR_FLG) THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
---
> IF (ERROR_FLG) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
1600a2089,2093
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1615,1619c2108,2114
< EXCEPTION
< WHEN TIMEOUT_OR_EOF THEN
< MESSAGE := NULL;
< WHEN OTHERS THEN
< RAISE;
---
> EXCEPTION
> WHEN TIMEOUT_OR_EOF THEN
> MESSAGE := NULL;
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')55]: ' || SQLERRM);
> RAISE;
1634a2130,2134
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1637,1643c2137,2146
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Invalid tracking set name: ' || TRACKING_SET_NAME);
< WHEN OTHERS THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Tracking Message Send Failed');
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')56]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking Message Send Failed');
1645c2148
<
---
>
1647c2150
<
---
>
1670c2173
< ARR LOC_MSG_PKD_ARR;
---
> ARR LOC_MSG_PKD_ARR;
1674a2178,2182
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
1677,1683c2185,2194
< EXCEPTION
< WHEN TABLE_NOT_FOUND THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Invalid tracking set name: ' || TRACKING_SET_NAME);
< WHEN OTHERS THEN
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Location Message Send Failed');
---
>
> EXCEPTION
> WHEN TABLE_NOT_FOUND THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Invalid tracking set name: ' || TRACKING_SET_NAME);
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')57]: ' || SQLERRM);
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Location Message Send Failed');
1687,1688c2198,2199
< MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
< 'Location Message, invalid queue count: ' || TO_CHAR(NOQ));
---
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Location Message, invalid queue count: ' || TO_CHAR(NOQ));
1690c2201
<
---
>
1699c2210
< FOR I IN 1..LOCATION_MSGS.COUNT
---
> FOR I IN 1..LOCATION_MSGS.COUNT
1707c2218
< FOR I IN 1..NOQ
---
> FOR I IN 1..NOQ
1713c2224
< QUEUE_NAME => QUEUE_NAME,
---
> QUEUE_NAME => QUEUE_NAME,
1726c2237,2240
< CNT NUMBER := 0;
---
> CNT NUMBER := 0;
> JOB_NAME VARCHAR2(260);
> TABLE_NOT_FOUND EXCEPTION;
> PRAGMA EXCEPTION_INIT(TABLE_NOT_FOUND, -00942);
1727a2242,2249
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> JOB_NAME :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_TRACKER_QUEUES');
>
1729,1731c2251,2252
< STMT := 'SELECT /*+ RESULT_CACHE */ num_loc_queues FROM ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME ||
< '_TRACKER_QUEUES');
---
> STMT := 'SELECT /*+ RESULT_CACHE */ num_loc_queues ' ||
> 'FROM ' || JOB_NAME;
1733c2254,2273
< EXECUTE IMMEDIATE STMT INTO CNT;
---
> BEGIN
> EXECUTE IMMEDIATE STMT INTO CNT;
>
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> CNT := 0;
>
> WHEN TABLE_NOT_FOUND THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[Cannot find table ' || JOB_NAME || ']');
> RAISE;
>
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')58]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> RAISE;
> END;
1742c2282,2283
< CNT NUMBER := 0;
---
> CNT NUMBER := 0;
> JOB_NAME VARCHAR2(260);
1743a2285,2292
> IF ( TRACKING_SET_NAME IS NULL ) THEN
> MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199,
> 'Tracking set name is NULL');
> END IF;
>
> JOB_NAME :=
> SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME || '_TRACKER_QUEUES');
>
1745,1747c2294,2298
< STMT := 'SELECT /*+ RESULT_CACHE */ num_trkr_queues FROM ' ||
< SYS.DBMS_ASSERT.ENQUOTE_NAME(TRACKING_SET_NAME ||
< '_TRACKER_QUEUES');
---
> STMT := 'SELECT /*+ RESULT_CACHE */ num_trkr_queues ' ||
> 'FROM ' || JOB_NAME;
>
> BEGIN
> EXECUTE IMMEDIATE STMT INTO CNT;
1749c2300,2310
< EXECUTE IMMEDIATE STMT INTO CNT;
---
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> CNT := 0;
> WHEN OTHERS THEN
> SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdoobjtrkrb.sql(' || $$PLSQL_LINE || ')59]: ' || SQLERRM);
> SYS.DBMS_SYSTEM.KSDWRT(
> SYS.DBMS_SYSTEM.TRACE_FILE,
> 'EXCEPTION[sdo_trkr(' || STMT || ')]');
> RAISE;
> END;
180,182c180,183 < STMT := 'SELECT ' || SYS.DBMS_ASSERT.ENQUOTE_NAME(COLUMN_NAME) || ' FROM ' || < SYS.DBMS_ASSERT.ENQUOTE_NAME(OWNER) || '.' || < SYS.DBMS_ASSERT.ENQUOTE_NAME(TABLE_NAME); --- > STMT := 'SELECT "' || SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COLUMN_NAME) || > '" FROM "' || > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(OWNER) || '"."' || > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(TABLE_NAME) || '"'; 395a397,402 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(1024); > G_COLNAM_NQ VARCHAR2(1024); > G_PTNNAM VARCHAR2(130); > G_PTNNAM_NQ VARCHAR2(130); 410c417 < TNAME := NLS_UPPER(TABLE_NAME); --- > TNAME := TABLE_NAME; 413c420,446 < TNAME := NLS_UPPER(SUBSTR(TABLE_NAME, DOT_INDEX+1)); --- > TNAME := SUBSTR(TABLE_NAME, DOT_INDEX+1); > END IF; > > IF ( SDO_UTIL.IS_BUMPY_CASE(TNAME) ) THEN > G_TABNAM := TNAME; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(TNAME), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME) ) THEN > G_COLNAM := COLUMN_NAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(COLUMN_NAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > > IF ( PARTITION_NAME IS NOT NULL ) THEN > IF ( SDO_UTIL.IS_BUMPY_CASE(PARTITION_NAME) ) THEN > G_PTNNAM := PARTITION_NAME; > ELSE > G_PTNNAM := REPLACE(NLS_UPPER(PARTITION_NAME), '"'); > END IF; > G_PTNNAM_NQ := REPLACE(G_PTNNAM, '"'); > ELSE > G_PTNNAM := NULL; > G_PTNNAM_NQ := NULL; 428c461 < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(TNAME) ; --- > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM_NQ); 430c463 < UPPER_TABLE := TNAME; --- > UPPER_TABLE := G_TABNAM_NQ; 433c466 < UPPER_TABLE := TNAME; --- > UPPER_TABLE := G_TABNAM_NQ; 443,444c476,477 < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER_TABLE), < NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME)), --- > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM), 463,464c496,497 < AND A.SDO_INDEX_PARTITION = NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(PARTITION_NAME)) < AND REPLACE(A.SDO_COLUMN_NAME,'"') = NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME)); --- > AND A.SDO_INDEX_PARTITION = SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_PTNNAM_NQ) > AND REPLACE(A.SDO_COLUMN_NAME,'"') = SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM_NQ); 474c507 < AND REPLACE(A.SDO_COLUMN_NAME,'"') = NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME)); --- > AND REPLACE(A.SDO_COLUMN_NAME,'"') = SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM_NQ); 490,492c523,525 < ' AND TABLE_NAME = :2 ' || < ' AND SDO_INDEX_PARTITION = :3 ' || < ' AND COLUMN_NAME = :4 '; --- > 'AND TABLE_NAME = :2 ' || > 'AND SDO_INDEX_PARTITION = :3 ' || > 'AND COLUMN_NAME = :4 '; 495,497c528,530 < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER_TABLE), < NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(PARTITION_NAME)), < NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME)); --- > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM_NQ), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_PTNNAM_NQ), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM_NQ); 502,503c535,536 < ' AND TABLE_NAME = :2 ' || < ' AND COLUMN_NAME = :3 '; --- > 'AND TABLE_NAME = :2 ' || > 'AND COLUMN_NAME = :3 '; 506,507c539,540 < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER_TABLE), < NLS_UPPER(SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COLUMN_NAME)); --- > SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM_NQ), > SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(G_COLNAM_NQ); 654a688,691 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(130); > G_COLNAM_NQ VARCHAR2(130); 669c706 < UPPER_TABLE := NLS_UPPER(TABLE_NAME); --- > UPPER_TABLE := TABLE_NAME; 672c709 < UPPER_TABLE := NLS_UPPER(SUBSTR(TABLE_NAME, DOT_INDEX+1)); --- > UPPER_TABLE := SUBSTR(TABLE_NAME, DOT_INDEX+1); 674a712,725 > IF ( SDO_UTIL.IS_BUMPY_CASE(UPPER_TABLE) ) THEN > G_TABNAM := UPPER_TABLE; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(UPPER_TABLE), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME) ) THEN > G_COLNAM := COLUMN_NAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(COLUMN_NAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > 678,679c729,730 < UPPER_TABLE, < COLUMN_NAME, --- > G_TABNAM, > G_COLNAM, 685,686c736,737 < STATUS := AVG_DELTAS_OF_OBJECTS(UPPER_USER, UPPER_TABLE, < COLUMN_NAME, DIMARRAY, --- > STATUS := AVG_DELTAS_OF_OBJECTS(UPPER_USER, G_TABNAM_NQ, > G_COLNAM_NQ, DIMARRAY, 724a776,779 > G_TABNAM VARCHAR2(130); > G_TABNAM_NQ VARCHAR2(130); > G_COLNAM VARCHAR2(130); > G_COLNAM_NQ VARCHAR2(130); 733,735c788,803 < STMT := 'SELECT ' || < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COLUMN_NAME) || ' FROM ' || < SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(TABLE_NAME); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLE_NAME) ) THEN > G_TABNAM := TABLE_NAME; > ELSE > G_TABNAM := REPLACE(NLS_UPPER(TABLE_NAME), '"'); > END IF; > G_TABNAM_NQ := REPLACE(G_TABNAM, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(COLUMN_NAME) ) THEN > G_COLNAM := COLUMN_NAME; > ELSE > G_COLNAM := REPLACE(NLS_UPPER(COLUMN_NAME), '"'); > END IF; > G_COLNAM_NQ := REPLACE(G_COLNAM, '"'); > > STMT := 'SELECT "' || SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_COLNAM_NQ) || > '" FROM "' || SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(G_TABNAM_NQ) || '"';
64a65,79 > FUNCTION GET_TABLE_PTN_OBJ_ID(TABLE_OWNER IN VARCHAR2, > TABLE_NAME IN VARCHAR2, > TABLE_PTN IN VARCHAR2 DEFAULT NULL) > RETURN NUMBER IS > EXTERNAL > NAME "get_table_ptn_obj_id" > LIBRARY ORDMD_UTL_LIBS > WITH CONTEXT > PARAMETERS(CONTEXT, > TABLE_OWNER, TABLE_OWNER INDICATOR, TABLE_OWNER LENGTH, > TABLE_NAME, TABLE_NAME INDICATOR, TABLE_NAME LENGTH, > TABLE_PTN, TABLE_PTN INDICATOR, TABLE_PTN LENGTH, > RETURN INDICATOR, RETURN); > > 167a183,224 > FUNCTION IS_BUMPY_CASE(NAME IN VARCHAR2, > SKIP_QUOTES IN BOOLEAN DEFAULT FALSE) > RETURN BOOLEAN DETERMINISTIC IS > LEN NUMBER; > CH VARCHAR2(2); > BEGIN > LEN := LENGTH(NAME); > > > > IF ( NOT SKIP_QUOTES ) THEN > IF ( LEN <= 2 ) THEN > RETURN FALSE; > END IF; > END IF; > > > IF ( NOT SKIP_QUOTES ) THEN > IF ( (SUBSTR(NAME, 1, 1) <> '"') OR > (SUBSTR(NAME, LEN, 1) <> '"') ) THEN > RETURN FALSE; > END IF; > END IF; > > > > > > FOR I IN 1 .. LEN > LOOP > CH := SUBSTR(NAME, I, 1); > IF ( CH <> NLS_UPPER(CH) ) THEN > RETURN TRUE; > END IF; > END LOOP; > > > RETURN FALSE; > END IS_BUMPY_CASE; > > > 230c287 < RETURN '"' || OBJNAME || '"'; --- > RETURN SYS.DBMS_ASSERT.ENQUOTE_NAME(OBJNAME, FALSE); 6549c6606,6607 < FUNCTION FROM_GEOJSON(GEOMETRY IN VARCHAR2, CRS IN VARCHAR2 DEFAULT NULL, --- > FUNCTION FROM_GEOJSON(GEOMETRY IN VARCHAR2, > CRS IN VARCHAR2 DEFAULT NULL,
6,16c6,16
< tname varchar2(130);
< stmt varchar2(2048);
< vcount INTEGER;
< dimcount INTEGER;
< tolerance NUMBER;
< dimelement MDSYS.SDO_DIM_ELEMENT;
< idx number;
< colname varchar2(1024);
< jsoncol varchar2(1024);
< jsonpath varchar2(1024);
< nextPos pls_integer;
---
> stmt varchar2(2048);
> vcount INTEGER;
> dimcount INTEGER;
> tolerance NUMBER;
> dimelement MDSYS.SDO_DIM_ELEMENT;
> idx number;
> owner varchar2(130);
> tabname varchar2(130);
> colname varchar2(1024);
> jsoncol varchar2(1024);
> jsonpath varchar2(1024);
18,44c18
< tname := sys_context('userenv', 'session_user');
< colname := nls_upper(:n.column_name);
<
< if ( (instr(:n.table_name, ' ') > 0 ) OR
< (instr(:n.table_name, '''') > 0 ) ) then
< mderr.raise_md_error('MD', 'SDO', -13199,
< 'wrong table name: ' || :n.table_name);
< end if;
<
< if ((instrb(colname, 'JSON_VALUE') > 0) and
< (instrb(colname, '(') > 0) and
< (instrb(colname, ')') > 0) and
< (instrb(colname, ',') > 0) and
< (instrb(colname, 'RETURNING') > 0)) then
< colname := mdsys.mdprvt_gmd.get_json_geom_col(colname);
< elsif ( (instr(colname, ' ') > 0 ) OR
< (instr(colname, '''') > 0 ) ) then
< mderr.raise_md_error('MD', 'SDO', -13199,
< 'wrong column name: ' || :n.column_name);
< end if;
<
< stmt := 'SELECT count(*) FROM MDSYS.SDO_GEOM_METADATA_TABLE ' ||
< 'WHERE sdo_owner = :tname AND sdo_table_name = :table_name '||
< ' AND sdo_column_name = :column_name ';
<
< EXECUTE IMMEDIATE stmt INTO vcount
< USING tname, nls_upper(:n.table_name), colname;
---
> owner := sys_context('userenv', 'session_user');
45a20,54
> if ( sdo_util.is_bumpy_case(:n.table_name) ) then
> tabname := :n.table_name;
> elsif ( (instr(:n.table_name, ' ') > 0 ) or
> (instr(:n.table_name, '''') > 0 ) ) then
> mderr.raise_md_error('MD', 'SDO', -13199,
> 'wrong table name: ' || :n.table_name);
> else
>
> tabname := replace(nls_upper(:n.table_name), '"');
> end if;
>
> if ( (instrb(:n.column_name, 'JSON_VALUE') > 0) and
> (instrb(:n.column_name, '(') > 0) and
> (instrb(:n.column_name, ')') > 0) and
> (instrb(:n.column_name, ',') > 0) and
> (instrb(:n.column_name, 'RETURNING') > 0)) then
> colname := mdsys.mdprvt_gmd.get_json_geom_col(:n.column_name);
> elsif ( sdo_util.is_bumpy_case(:n.column_name) ) then
> colname := :n.column_name;
> elsif ( (instr(:n.column_name, ' ') > 0 ) or
> (instr(:n.column_name, '''') > 0 ) ) then
> mderr.raise_md_error('MD', 'SDO', -13199,
> 'wrong column name: ' || :n.column_name);
> else
>
> colname := replace(nls_upper(:n.column_name), '"');
> end if;
>
> stmt := 'SELECT count(*) ' ||
> 'FROM MDSYS.SDO_GEOM_METADATA_TABLE ' ||
> 'WHERE sdo_owner = :own ' ||
> 'AND sdo_table_name = :tab '||
> 'AND sdo_column_name = :col';
> EXECUTE IMMEDIATE stmt INTO vcount
> USING owner, tabname, colname;
58,59c67,68
< mdsys.sdo_meta.insert_all_sdo_geom_metadata(tname,
< :n.table_name,
---
> mdsys.sdo_meta.insert_all_sdo_geom_metadata(owner,
> tabname,
5a6,8
> owner varchar2(130);
> tabname varchar2(130);
> colname varchar2(1024);
6a10
> owner := sys_context('userenv', 'session_user');
8c12,38
< mdsys.sdo_meta.change_all_sdo_geom_metadata(sys_context('userenv', 'session_user'),
---
> if ( sdo_util.is_bumpy_case(:n.table_name) ) then
> tabname := :n.table_name;
> elsif ( (instr(:n.table_name, ' ') > 0 ) OR
> (instr(:n.table_name, '''') > 0 ) ) then
> mderr.raise_md_error('MD', 'SDO', -13199,
> 'wrong table name: ' || :n.table_name);
> else
> tabname := replace(nls_upper(:n.table_name), '"');
> end if;
>
> if ( (instrb(:n.column_name, 'JSON_VALUE') > 0) and
> (instrb(:n.column_name, '(') > 0) and
> (instrb(:n.column_name, ')') > 0) and
> (instrb(:n.column_name, ',') > 0) and
> (instrb(:n.column_name, 'RETURNING') > 0)) then
> colname := mdsys.mdprvt_gmd.get_json_geom_col(:n.column_name);
> elsif ( sdo_util.is_bumpy_case(:n.column_name) ) then
> colname := :n.column_name;
> elsif ( (instr(:n.column_name, ' ') > 0 ) OR
> (instr(:n.column_name, '''') > 0 ) ) then
> mderr.raise_md_error('MD', 'SDO', -13199,
> 'wrong column name: ' || :n.column_name);
> else
> colname := replace(nls_upper(:n.column_name), '"');
> end if;
>
> mdsys.sdo_meta.change_all_sdo_geom_metadata(owner,
11,12c41,42
< :n.table_name,
< :n.column_name,
---
> tabname,
> colname,
11a12,14 > TNAME_NQ VARCHAR2(130); > CNAME VARCHAR2(130); > CNAME_NQ VARCHAR2(130); 52c55,58 < SELECT NLS_UPPER(SUBSTR(TABLENAME, LEN+1)) INTO TNAME FROM SYS.DUAL; --- > SELECT SUBSTR(TABLENAME, LEN+1) INTO TNAME FROM SYS.DUAL; > IF ( NOT SDO_UTIL.IS_BUMPY_CASE(TNAME) ) THEN > TNAME := REPLACE(NLS_UPPER(TNAME), '"'); > END IF; 57c63,74 < TNAME := NLS_UPPER(TABLENAME); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLENAME) ) THEN > TNAME := TABLENAME; > ELSE > TNAME := REPLACE(NLS_UPPER(TABLENAME), '"'); > END IF; > END IF; > TNAME_NQ := REPLACE(TNAME, '"'); > > IF ( SDO_UTIL.IS_BUMPY_CASE(COLNAME) ) THEN > CNAME := COLNAME; > ELSE > CNAME := REPLACE(NLS_UPPER(COLNAME), '"'); 58a76 > CNAME_NQ := REPLACE(CNAME, '"'); 77c95 < 'and a.sdo_column_name = SYS.DBMS_ASSERT.ENQUOTE_NAME(:colnam) '; --- > 'and replace(a.sdo_column_name, ''"'') = :colnam '; 80c98 < USING TSCHEMA, TNAME, COLNAME; --- > USING TSCHEMA, TNAME_NQ, CNAME_NQ; 113c131,135 < TPARTN := NLS_UPPER(TABLEPARTITION); --- > IF ( SDO_UTIL.IS_BUMPY_CASE(TABLEPARTITION) ) THEN > TPARTN := TABLEPARTITION; > ELSE > TPARTN := REPLACE(NLS_UPPER(TABLEPARTITION), '"'); > END IF; 124c146 < USING TSCHEMA, TNAME, TPARTN, ISCHEMA, INAME; --- > USING TSCHEMA, TNAME_NQ, TPARTN, ISCHEMA, INAME; 130c152 < COLS(1) := SYS.ODCICOLINFO(TSCHEMA, TNAME, NLS_UPPER(COLNAME), --- > COLS(1) := SYS.ODCICOLINFO(TSCHEMA, TNAME_NQ, CNAME_NQ,
277c277 < SYS.DBMS_ASSERT.NOOP(SDO_UTIL.NUMBER_TO_CHAR(NND2)); --- > SDO_UTIL.NUMBER_TO_CHAR(NND2); 291c291 < SYS.DBMS_ASSERT.NOOP(SDO_UTIL.NUMBER_TO_CHAR(NND1)); --- > SDO_UTIL.NUMBER_TO_CHAR(NND1); 377,378c377 < STATUS := MDSYS.PRVT_IDX.CRT_DUMMY_IDX(PART_IA2, < PART_NAME2.INDEXPARTITION); --- > STATUS := MDSYS.PRVT_IDX.CRT_DUMMY_IDX(PART_IA2); 443,444c442 < STATUS := MDSYS.PRVT_IDX.CRT_DUMMY_IDX(PART_IA1, < PART_NAME1.INDEXPARTITION); --- > STATUS := MDSYS.PRVT_IDX.CRT_DUMMY_IDX(PART_IA1); 465,466c463 < STATUS := MDSYS.PRVT_IDX.CRT_DUMMY_IDX(PART_IA2, < PART_NAME2.INDEXPARTITION); --- > STATUS := MDSYS.PRVT_IDX.CRT_DUMMY_IDX(PART_IA2);
77c77 < REST_VARIABLES := UPPER(VARIABLES); --- > REST_VARIABLES := NLS_UPPER(VARIABLES); 604c604 < VAR := UPPER(SUBSTRB(SELF.STRBUFFER,IDXSTART,IDXEND-IDXSTART)); --- > VAR := NLS_UPPER(SUBSTRB(SELF.STRBUFFER,IDXSTART,IDXEND-IDXSTART)); 887c887 < VAR := UPPER(XMLDOM.GETNODEVALUE(XMLDOM.ITEM(XMLDOM.GETATTRIBUTES(N1),0))); --- > VAR := NLS_UPPER(XMLDOM.GETNODEVALUE(XMLDOM.ITEM(XMLDOM.GETATTRIBUTES(N1),0)));
8c8 < WHERE b.sdo_table_name = a.table_name --- > WHERE replace(b.sdo_table_name, '"') = a.table_name
13c13,15 < SDO_DML_BATCH_SIZE, SDO_RTREE_ENT_XPND, --- > SDO_DML_BATCH_SIZE, > SDO_RTREE_READ_ONLY, > SDO_RTREE_ENT_XPND,
18c18,20 < SDO_DML_BATCH_SIZE, SDO_RTREE_ENT_XPND, --- > SDO_DML_BATCH_SIZE, > SDO_RTREE_READ_ONLY, > SDO_RTREE_ENT_XPND,
18c18,20 < SDO_DML_BATCH_SIZE, SDO_RTREE_ENT_XPND, --- > SDO_DML_BATCH_SIZE, > SDO_RTREE_READ_ONLY, > SDO_RTREE_ENT_XPND,
1,3c1 < function dg$getFlatDg(owner VARCHAR2, < tableName VARCHAR2, < jcolName VARCHAR2) RETURN dg$rowset PIPELINED --- > function dg$getFlatDg(dg CLOB) RETURN dg$rowset PIPELINED 13,17c11,12 < stmt := 'with dg_t as (SELECT sys.dg$getDgQuoteName(:1, :2, :3, < dbms_json.format_flat, 0) dg_doc < FROM dual) < select jt.jpath as PATH, jt.jtype as TYPE, jt.tlength as LENGTH < from dg_t, json_table(dg_doc,''$[*]'' columns --- > stmt := 'select jt.jpath as PATH, jt.jtype as TYPE, jt.tlength as LENGTH > from json_table(:1,''$[*]'' columns 22c17 < OPEN cur for stmt USING owner, tableName, jcolName; --- > OPEN cur for stmt USING dg;
1,2c1,2 < function dg$hasDGIndex(owner VARCHAR2, < tableName VARCHAR2, --- > function dg$hasDGIndex(owner NUMBER, > tab NUMBER, 5,7d4 < userId NUMBER; < tableId NUMBER; < indexName varchar2(130); 10,30d6 < -- get index name, owner's id and table number by checking if the < -- column has a context index < EXECUTE IMMEDIATE < 'select ix.index_name, u.user_id, o.object_id < from dba_ind_columns ic, dba_indexes ix, dba_users u, dba_objects o < where < ic.table_owner = ix.table_owner and < ic.index_name = ix.index_name and < ic.table_name = ix.table_name and < ic.table_owner = u.username and < u.username = o.owner and < o.object_name = ic.table_name and < o.object_type = ''TABLE'' and < ic.column_name= :1 and < ic.table_name= :2 and < u.username= :3 and < ix.ITYP_OWNER = ''CTXSYS'' and < (ix.ITYP_NAME= ''CONTEXT'' or ix.ITYP_NAME = ''CONTEXT_V2'')' < INTO indexName, userId, tableId < USING jcolName, tableName, owner; < 32,33d7 < /* bug 23548844: execute immediate without into does not raise < no_data_found error */ 38c12 < idx_name = :1 and --- > idx_table_owner# = :1 and 40c14 < idx_table_owner# = :3 and --- > idx_text_name = :3 and 43c17 < USING indexName, tableId, userId; --- > USING owner, tab, jcolName; 48c22 < WHEN no_data_found THEN --- > WHEN others THEN
1c1 < PACKAGE dbms_ash AUTHID CURRENT_USER IS --- > PACKAGE dbms_ash AUTHID DEFINER IS 73a74 > , RESOLUTION VARCHAR(30) 120c121 < REPORT_INTERNAL_VERSION CONSTANT VARCHAR2(64) := '44'; --- > REPORT_INTERNAL_VERSION CONSTANT VARCHAR2(64) := '47'; 128c129 < OMC_ALLOWED_ERR_RATIO CONSTANT NUMBER := 0.98; --- > OMC_ALLOWED_ERR_RATIO CONSTANT NUMBER := 1; 131,132d131 < OMC_DEF_BUCKETS CONSTANT NUMBER := 120; < 134,135c133,149 < OMC_DEF_ROWS_PER_BUCKET CONSTANT NUMBER := 20; < --- > > > > > > OMC_LOW_RESOLUTION CONSTANT VARCHAR2(10) := 'LOW'; > OMC_LOW_BUCKETS CONSTANT NUMBER := 120; > OMC_LOW_ROWS_PER_BUCKET CONSTANT NUMBER := 20; > OMC_MED_RESOLUTION CONSTANT VARCHAR2(10) := 'MEDIUM'; > OMC_MED_BUCKETS CONSTANT NUMBER := 180; > OMC_MED_ROWS_PER_BUCKET CONSTANT NUMBER := 35; > OMC_HIGH_RESOLUTION CONSTANT VARCHAR2(10) := 'HIGH'; > OMC_HIGH_BUCKETS CONSTANT NUMBER := 360; > OMC_HIGH_ROWS_PER_BUCKET CONSTANT NUMBER := 50; > OMC_MAX_RESOLUTION CONSTANT VARCHAR2(10) := 'MAX'; > > 188,198c202,236 < FUNCTION FETCH_SQLTEXT_LOCAL(P_SQLID IN VARCHAR, P_DBID IN NUMBER, < P_TIME_LIMIT IN VARCHAR) < RETURN VARCHAR; < < FUNCTION FETCH_SQLTEXT_AWR(P_SQLID IN VARCHAR, P_DBID IN NUMBER, < P_IS_PDB IN VARCHAR, P_TIME_LIMIT IN VARCHAR) < RETURN VARCHAR; < < FUNCTION FETCH_OBJ_NAME_LOCAL(P_OBJ_ID IN NUMBER, P_DBID IN NUMBER, < P_CON_DBID IN NUMBER, P_TIME_LIMIT IN VARCHAR) < RETURN VARCHAR; --- > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION FETCH_SQLTEXT(P_SQLID IN VARCHAR, > P_DBID IN NUMBER, P_CON_DBID IN NUMBER, > P_IS_LOCAL IN VARCHAR, P_IS_PDB IN VARCHAR, > P_IS_OLD IN VARCHAR, P_TIME_LIMIT IN VARCHAR) > RETURN XMLTYPE; 200,203c238,299 < FUNCTION FETCH_OBJ_NAME_AWR(P_OBJ_ID IN NUMBER, P_DBID IN NUMBER, < P_CON_DBID IN NUMBER, P_IS_PDB IN VARCHAR, < P_TIME_LIMIT IN VARCHAR) < RETURN VARCHAR; --- > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION FETCH_OBJ_NAME(P_OBJ_ID IN NUMBER, P_DBID IN NUMBER, > P_CON_DBID IN NUMBER, P_IS_LOCAL IN VARCHAR, > P_LOCAL_TYPE IN VARCHAR, P_IS_OLD IN VARCHAR, > P_TIME_LIMIT IN VARCHAR) > RETURN XMLTYPE; 204a301,310 > > > > > > > > > > 208a315,324 > > > > > > > > > > 266a383 > 349a467,468 > > 356c475,476 < , IGNORE_CPU_HISTORY IN VARCHAR := 'n') --- > , IGNORE_CPU_HISTORY IN VARCHAR := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 374a495,496 > > 381c503,504 < , AWR_INFO IN VARCHAR2 := 'n') --- > , AWR_INFO IN VARCHAR2 := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 396a520,521 > > 406c531,532 < , IGNORE_CPU_HISTORY IN VARCHAR := 'n') --- > , IGNORE_CPU_HISTORY IN VARCHAR := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 420a547,548 > > 428c556,557 < , IGNORE_CPU_HISTORY IN VARCHAR := 'n') --- > , IGNORE_CPU_HISTORY IN VARCHAR := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 447a577,578 > > 455c586,587 < , INSTANCE_NUMBER IN NUMBER := NULL) --- > , INSTANCE_NUMBER IN NUMBER := NULL > , RESOLUTION IN VARCHAR2 := 'medium') 471a604,605 > > 482c616,617 < , IGNORE_CPU_HISTORY IN VARCHAR := 'n') --- > , IGNORE_CPU_HISTORY IN VARCHAR := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 499a635,636 > > 507c644,645 < , MINIMIZE_COST IN VARCHAR2 := 'n') --- > , MINIMIZE_COST IN VARCHAR2 := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 528a667,668 > > 537c677,678 < , MINIMIZE_COST IN VARCHAR2 := 'n') --- > , MINIMIZE_COST IN VARCHAR2 := 'n' > , RESOLUTION IN VARCHAR2 := 'medium') 555a697,698 > > 566c709,710 < , MINIMIZE_COST IN VARCHAR2 := 'n') --- > , MINIMIZE_COST IN VARCHAR2 := 'n' > , RESOLUTION IN VARCHAR2 := 'medium')
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '19.07.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '19.07.01.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('19.07.00.00', '.');
< msn CONSTANT NUMBER := instr('19.07.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('19.07.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('19.07.01.00', '.');
> msn CONSTANT NUMBER := instr('19.07.01.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('19.07.01.00', '.', msn + 1);
29c29
< to_number(substr('19.07.00.00', 1, fsn - 1));
---
> to_number(substr('19.07.01.00', 1, fsn - 1));
31c31
< to_number(substr('19.07.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('19.07.01.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('19.07.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('19.07.01.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('19.07.00.00', psn + 1));
---
> to_number(substr('19.07.01.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '19.06.01.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '19.06.02.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('19.06.01.00', '.');
< msn CONSTANT NUMBER := instr('19.06.01.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('19.06.01.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('19.06.02.00', '.');
> msn CONSTANT NUMBER := instr('19.06.02.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('19.06.02.00', '.', msn + 1);
29c29
< to_number(substr('19.06.01.00', 1, fsn - 1));
---
> to_number(substr('19.06.02.00', 1, fsn - 1));
31c31
< to_number(substr('19.06.01.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('19.06.02.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('19.06.01.00', msn + 1, psn - msn - 1));
---
> to_number(substr('19.06.02.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('19.06.01.00', psn + 1));
---
> to_number(substr('19.06.02.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '19.07.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '19.08.00.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('19.07.00.00', '.');
< msn CONSTANT NUMBER := instr('19.07.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('19.07.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('19.08.00.00', '.');
> msn CONSTANT NUMBER := instr('19.08.00.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('19.08.00.00', '.', msn + 1);
29c29
< to_number(substr('19.07.00.00', 1, fsn - 1));
---
> to_number(substr('19.08.00.00', 1, fsn - 1));
31c31
< to_number(substr('19.07.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('19.08.00.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('19.07.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('19.08.00.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('19.07.00.00', psn + 1));
---
> to_number(substr('19.08.00.00', psn + 1));
475a476,489 > -- NAME: EVAL_PART_KEY_OPERATOR > -- > -- DESCRIPTION: > -- Replace PL/SQL functions such as CAST_TO_RAW, TO_DATE, TIME_STAMP > -- with the actual results of their evaluations in the DDL statement > -- > -- PARAMETERS: TEXT_OF_DDL - Text of DDL that contains the partition spec > -- KEY - One of CAST_TO_RAW, TO_DATE, TIME_STAMP > -- > -- RETURNS: Modified TEXT_OF_DDL > -- > FUNCTION EVAL_PART_KEY_OPERATOR(TEXT_OF_DDL IN OUT CLOB, KEY VARCHAR2) > RETURN CLOB; >
13c13 < '19.6.1.0.0'; --- > '19.6.2.0.0';
13c13 < '19.7.0.0.0'; --- > '19.8.0.0.0';
13c13 < '19.7.0.0.0'; --- > '19.7.1.0.0';
18,21c18,22 < CLOUD_SERVICE_TYPE_ADW CONSTANT VARCHAR2(30) := 'DWCS'; < CLOUD_SERVICE_TYPE_EXADATA CONSTANT VARCHAR2(30) := 'EECS'; < CLOUD_SERVICE_TYPE_PAAS CONSTANT VARCHAR2(30) := 'PAAS'; < CLOUD_SERVICE_TYPE_ATP CONSTANT VARCHAR2(30) := 'OLTP'; --- > CLOUD_SERVICE_TYPE_ADW_D CONSTANT VARCHAR2(30) := 'ADW-D'; > CLOUD_SERVICE_TYPE_ADW_S CONSTANT VARCHAR2(30) := 'ADW-S'; > CLOUD_SERVICE_TYPE_ATP_D CONSTANT VARCHAR2(30) := 'ATP-D'; > CLOUD_SERVICE_TYPE_ATP_S CONSTANT VARCHAR2(30) := 'ATP-S'; > CLOUD_SERVICE_TYPE_OTHER CONSTANT VARCHAR2(30) := 'OTHER'; 369,373c370,375 < -- NONE: None < -- DWCS: Autonomous Data Warehouse < -- EECS: Exadata Express Cloud Service < -- PAAS: Platform As A Service (MDBCS) < -- OLTP: ATP --- > -- CLOUD_SERVICE_TYPE_NONE => 'NONE'; > -- CLOUD_SERVICE_TYPE_ADW_D => 'ADW-D'; > -- CLOUD_SERVICE_TYPE_ADW_S => 'ADW-S'; > -- CLOUD_SERVICE_TYPE_ATP_D => 'ATP-D'; > -- CLOUD_SERVICE_TYPE_ATP_S => 'ATP-S'; > -- CLOUD_SERVICE_TYPE_OTHER => 'OTHER'; 378c380 < --------------------------------- is_adw ----------------------------------- --- > -------------------------- get_tz_offset ----------------------------------- 380c382 < -- is_adw --- > -- get_tz_offset 383c385 < -- check if current DB is Autonomous Data Warehouse --- > -- get timezone offset from systimestamp 386,387c388 < -- TRUE is current DB is Autonomous Data Warehouse < -- FALSE otherwise --- > -- timezone offset in TZ_HOUR:TZ_MINUTE format 389,390c390,420 < FUNCTION is_adw < RETURN BOOLEAN; --- > FUNCTION get_tz_offset > RETURN VARCHAR2; > > ----------------------------- chooseAwrForPdb ------------------------- > -- NAME: > -- chooseAwrForPdb > -- > -- DESCRIPTION: > -- This function determines the location/prefix of the AWR view to use > -- for the database considering the following conditions: > -- 1. Check whether local awr_pdb has snapshots. > -- If not, return AWR_VIEW_ROOT > -- 2. If local awr has some snapshots use AWR_VIEW_PDB > -- 3. If by change local awr was stopped/disabled for some time > -- (say for eg., last 3 hrs not local awr snapshots) > -- then use AWR_VIEW_ROOT > -- > -- > -- NOTE: The beginTime and endTime used are in DB Timezone. > -- Unlike the case of ASH, no need to convert to UTC, > -- since end_interval_time in awr_root, awr_pdb are in same TZ > -- > -- PARAMETERS: > -- dbid (IN) - database id > -- > -- RETURN: > -- Returned type can be 'AWR_ROOT' or 'AWR_PDB'. > -- > ----------------------------------------------------------------------------- > FUNCTION chooseAwrForPdb(beginTime IN DATE) > RETURN VARCHAR2;
41a42,43 > > 54a57 > RESOLUTION IN VARCHAR2 := NULL, 90a94,95 > > 103a109 > RESOLUTION IN VARCHAR2 := NULL,
943a944,947 > > > > 964,969c968,979 < FUNCTION REPORT_ADW_WORKLOAD_REALTIME( < START_TIME IN DATE DEFAULT NULL, < END_TIME IN DATE DEFAULT NULL, < INST_ID_LOW IN NUMBER DEFAULT NULL, < INST_ID_HIGH IN NUMBER DEFAULT NULL, < SHOW_SQL IN NUMBER DEFAULT 0) --- > > > > FUNCTION GET_RMMETRICS_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME IN DATE DEFAULT NULL, > END_TIME IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT 0) 994,999c1004,1016 < FUNCTION REPORT_ADW_WORKLOAD_HISTORICAL( < START_TIME IN DATE DEFAULT NULL, < END_TIME IN DATE DEFAULT NULL, < DBID IN NUMBER DEFAULT NULL, < INST_ID IN NUMBER DEFAULT NULL, < SHOW_SQL IN NUMBER DEFAULT 0) --- > > > > > FUNCTION GET_SQL_N_PARSE_TIME_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) 1001a1019,1159 > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_WAIT_TIME_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION GET_SYSMETRICS_XML( > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME_UTC IN DATE DEFAULT NULL, > END_TIME_UTC IN DATE DEFAULT NULL, > BUCKET_COUNT IN NUMBER DEFAULT 128, > BUCKET_INTERVAL IN NUMBER DEFAULT NULL, > AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > FUNCTION GET_STORAGE_METRICS_XML( > SERVICE_TYPE IN VARCHAR2 DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > FUNCTION GET_SESSION_METRICS_XML( > SHOW_SQL IN NUMBER DEFAULT NULL) > RETURN XMLTYPE; > > > > > > > > > > > > > > > > > > > > > > > > > > > > FUNCTION REPORT_WORKLOAD( > SERVICE_TYPE IN VARCHAR2 DEFAULT NULL, > IS_REALTIME IN NUMBER DEFAULT 1, > DBID IN NUMBER DEFAULT NULL, > START_TIME IN DATE DEFAULT NULL, > END_TIME IN DATE DEFAULT NULL, > REPORT_LEVEL IN VARCHAR2 DEFAULT NULL, > SHOW_SQL IN NUMBER DEFAULT 0) > RETURN XMLTYPE;
2d1 < PROCEDURE TRACE(TRACE_INFO VARCHAR2); 4,10d2 < FUNCTION SPACE_USAGE2(SEGMENT_OWNER IN VARCHAR2, < SEGMENT_NAME IN VARCHAR2, < SEGMENT_TYPE IN VARCHAR2, < PARTITION_NAME IN VARCHAR2, < BITMAPPED IN NUMBER, < FREELIST_GROUPS IN NUMBER < ) RETURN NUMBER;
146a147
> DBMS_OUTPUT.PUT_LINE('resolution = ' || CONTEXT.RESOLUTION);
399,400c400
< CONTEXT.ERROR_XML,
< XMLFOREST(
---
> XMLATTRIBUTES(
411,413c411,415
< , CONTEXT.SYSTZ AS "sysTZ"
< , TO_CHAR(CONTEXT.MINAVAILTIMEUTC,OMC_TIME_FORMAT) AS "minAvailTimeUTC"
< , TO_CHAR(CONTEXT.MAXAVAILTIMEUTC,OMC_TIME_FORMAT) AS "maxAvailTimeUTC"
---
> , TO_CHAR(ROUND(CONTEXT.SYSTZ,6)) AS "sysTZ"
> , TO_CHAR(CONTEXT.MINAVAILTIMEUTC,OMC_TIME_FORMAT)
> AS "minAvailTimeUTC"
> , TO_CHAR(CONTEXT.MAXAVAILTIMEUTC,OMC_TIME_FORMAT)
> AS "maxAvailTimeUTC"
417a420
> , CONTEXT.RESOLUTION AS "resolution"
422,423c425,426
< , CONTEXT.MEMSIZEDAYS AS "memSizeDays"
< , CONTEXT.MEMTZ AS "memTZ"
---
> , TO_CHAR(ROUND(CONTEXT.MEMSIZEDAYS,6)) AS "memSizeDays"
> , TO_CHAR(ROUND(CONTEXT.MEMTZ,6)) AS "memTZ"
426,428c429,431
< , CONTEXT.DBID AS "dbid"
< , CONTEXT.BEGINSNAPID AS "beginSnapID"
< , CONTEXT.ENDSNAPID AS "endSnapID"
---
> , TO_CHAR(CONTEXT.DBID) AS "dbid"
> , TO_CHAR(CONTEXT.BEGINSNAPID) AS "beginSnapID"
> , TO_CHAR(CONTEXT.ENDSNAPID) AS "endSnapID"
430,431c433,435
< , TO_CHAR(CONTEXT.DISKENDTIMEUTC,OMC_TIME_FORMAT) AS "diskEndTimeUTC"
< , CONTEXT.DISKTZ AS "diskTZ"
---
> , TO_CHAR(CONTEXT.DISKENDTIMEUTC,OMC_TIME_FORMAT)
> AS "diskEndTimeUTC"
> , TO_CHAR(ROUND(CONTEXT.DISKTZ,6)) AS "diskTZ"
437c441
< ))
---
> ), CONTEXT.ERROR_XML)
478c482,483
< AWR_INFO IN VARCHAR, IGNORE_CPU_HISTORY IN VARCHAR)
---
> AWR_INFO IN VARCHAR, IGNORE_CPU_HISTORY IN VARCHAR,
> RESOLUTION IN VARCHAR)
527a533,543
>
>
> IF LOWER(RESOLUTION) LIKE 'all%' OR LOWER(RESOLUTION) LIKE 'max%' THEN
> CONTEXT.RESOLUTION := OMC_MAX_RESOLUTION;
> ELSIF LOWER(RESOLUTION) LIKE 'low%' THEN
> CONTEXT.RESOLUTION := OMC_LOW_RESOLUTION;
> ELSIF LOWER(RESOLUTION) LIKE 'high%' THEN
> CONTEXT.RESOLUTION := OMC_HIGH_RESOLUTION;
> ELSE
> CONTEXT.RESOLUTION := OMC_MED_RESOLUTION;
> END IF;
571c587,588
< OR (CONTEXT.LOCAL_CONDBID IS NOT NULL AND DBID = CONTEXT.LOCAL_DBID)) THEN
---
> OR (CONTEXT.LOCAL_CONDBID IS NOT NULL
> AND DBID = CONTEXT.LOCAL_CONDBID)) THEN
619a637
> L_BUCKETS NUMBER;
631c649,653
< L_SIZE := ROUND(GREATEST(L_MIN_SIZE, L_DIFF_SEC / OMC_DEF_BUCKETS),0);
---
> L_BUCKETS :=
> (CASE WHEN CONTEXT.RESOLUTION = OMC_LOW_RESOLUTION THEN OMC_LOW_BUCKETS
> WHEN CONTEXT.RESOLUTION = OMC_MED_RESOLUTION THEN OMC_MED_BUCKETS
> ELSE OMC_HIGH_BUCKETS END);
> L_SIZE := ROUND(GREATEST(L_MIN_SIZE, L_DIFF_SEC / L_BUCKETS),0);
900c922,923
< , AWR_INFO IN VARCHAR)
---
> , AWR_INFO IN VARCHAR
> , RESOLUTION IN VARCHAR)
905c928
< MINIMIZE_COST, AWR_INFO, 'n');
---
> MINIMIZE_COST, AWR_INFO, 'n', RESOLUTION);
925c948,949
< , IGNORE_CPU_HISTORY IN VARCHAR)
---
> , IGNORE_CPU_HISTORY IN VARCHAR
> , RESOLUTION IN VARCHAR)
930c954
< MINIMIZE_COST, AWR_INFO, IGNORE_CPU_HISTORY);
---
> MINIMIZE_COST, AWR_INFO, IGNORE_CPU_HISTORY, RESOLUTION);
967c991,992
< , IGNORE_CPU_HISTORY IN VARCHAR)
---
> , IGNORE_CPU_HISTORY IN VARCHAR
> , RESOLUTION IN VARCHAR)
972c997
< MINIMIZE_COST, AWR_INFO, IGNORE_CPU_HISTORY);
---
> MINIMIZE_COST, AWR_INFO, IGNORE_CPU_HISTORY, RESOLUTION);
1570c1595
< CONTEXT := INITBASECONTEXT(P_DBID,'n','n','n',P_INST_NUM,'n','y','n');
---
> CONTEXT := INITBASECONTEXT(P_DBID,'n','n','n',P_INST_NUM,'n','y','n','low');
1926c1951
< , 'n', 'n', IGNORE_CPU_HISTORY);
---
> , 'n', 'n', IGNORE_CPU_HISTORY, 'low');
2159a2185,2190
>
>
>
>
>
>
2188c2219
< AND a.snap_id <= @E_SNAP@
---
> AND a.snap_id <= @E_SNAP@ + 5
2287a2319
> L_CONTEXT_XML XMLTYPE;
2382a2415
> L_CONTEXT_XML := CONTEXTTOXML(CONTEXT);
2390c2423
< ,L_TIMING ,P_INPUT, L_CPU, L_AWR, L_BASE)
---
> ,L_TIMING, L_CONTEXT_XML, P_INPUT, L_CPU, L_AWR, L_BASE)
2604c2637
< AND a.snap_id <= @E_SNAP@
---
> AND a.snap_id <= @E_SNAP@ + 5
2805a2839,2840
> L_IS_OLD VARCHAR2(10);
> L_IS_PDB VARCHAR2(10);
2806a2842,2843
> L_CONDBID_COL VARCHAR2(10);
> L_LOCAL_SOURCE VARCHAR2(10);
2812a2850,2859
> IF CONTEXT.LOCAL_COMP_VER >= VER_12_2 THEN
> L_IS_OLD := '''N''';
> ELSE
> L_IS_OLD := '''Y''';
> END IF;
> IF CONTEXT.LOCAL_IS_PDB THEN
> L_IS_PDB := '''Y''';
> ELSE
> L_IS_PDB := '''N''';
> END IF;
2990,2991c3037,3039
< sqlid as "v"),
< XMLCDATA(sql_text)))) as xml
---
> sqlid as "v",
> extractvalue(sql_text, '/a/c') as "op"),
> XMLCDATA(extractvalue(sql_text, '/a/s'))))) as xml
2998,2999c3046,3052
< ' sys.dbms_ash.fetch_sqltext_local(t.sqlid, ' ||
< CONTEXT.LOCAL_DBID || ',' || L_TIME_LIMIT || ')');
---
> ' sys.dbms_ash.fetch_sqltext(t.sqlid, '
> || CONTEXT.LOCAL_DBID || ','
> || NVL(TO_CHAR(CONTEXT.LOCAL_CONDBID),'NULL') || ','
> || '''Y''' || ','
> || L_IS_PDB || ','
> || L_IS_OLD || ','
> || L_TIME_LIMIT || ')');
3003,3004c3056,3062
< ' sys.dbms_ash.fetch_sqltext_awr(t.sqlid, ' ||
< CONTEXT.LOCAL_DBID || ',' || L_USE_PDB_AWR || ',' || L_TIME_LIMIT || ')');
---
> ' sys.dbms_ash.fetch_sqltext(t.sqlid, '
> || CONTEXT.DBID || ','
> || 'NULL' || ','
> || '''N''' || ','
> || L_IS_PDB || ','
> || L_IS_OLD || ','
> || L_TIME_LIMIT || ')');
3671c3729,3731
< n.name as "name")))) as xml
---
> extractvalue(n.name,'/a/n') as "name",
> extractvalue(n.name,'/a/t') as "type"
> )))) as xml
3673a3734,3735
>
>
3679,3688c3741
< IF CONTEXT.IS_LOCAL THEN
< L_TEXT := REPLACE(L_TEXT, '%fetch%',
< ' sys.dbms_ash.fetch_obj_name_local(object, '
< || CONTEXT.DBID || ', con_dbid,' || L_TIME_LIMIT || ')');
< ELSE
< L_TEXT := REPLACE(L_TEXT, '%fetch%',
< ' sys.dbms_ash.fetch_obj_name_awr(object, '
< || CONTEXT.DBID || ', con_dbid' ||
< L_USE_PDB_AWR || ',' || L_TIME_LIMIT || ')');
< END IF;
---
> L_CONDBID_COL := 'con_dbid';
3693,3696c3746,3765
< IF CONTEXT.IS_LOCAL THEN
< L_TEXT := REPLACE(L_TEXT, '%fetch%',
< ' sys.dbms_ash.fetch_obj_name_local(object, '
< || CONTEXT.DBID || ', NULL,' || L_TIME_LIMIT || ')');
---
> L_CONDBID_COL := 'NULL';
> END IF;
>
>
> IF CONTEXT.IS_LOCAL THEN
> IF CONTEXT.IS_CDB_ROOT THEN
> L_LOCAL_SOURCE := '''ROOT''';
> ELSIF CONTEXT.LOCAL_IS_PDB THEN
> L_LOCAL_SOURCE := '''PDB''';
> L_CONDBID_COL := TO_CHAR(CONTEXT.LOCAL_CONDBID);
> ELSE
> L_LOCAL_SOURCE := '''STANDARD''';
> END IF;
> L_TEXT := REPLACE(L_TEXT, '%fetch%',
> ' sys.dbms_ash.fetch_obj_name(object, '
> || CONTEXT.LOCAL_DBID || ',' || L_CONDBID_COL || ',''Y'','
> || L_LOCAL_SOURCE || ',' || L_IS_OLD || ',' || L_TIME_LIMIT || ')');
> ELSE
> IF CONTEXT.LOCAL_IS_PDB THEN
> L_LOCAL_SOURCE := '''PDB''';
3698,3701c3767
< L_TEXT := REPLACE(L_TEXT, '%fetch%',
< ' sys.dbms_ash.fetch_obj_name_awr(object, '
< || CONTEXT.DBID || ', NULL,' || L_USE_PDB_AWR || ',' ||
< L_TIME_LIMIT || ')');
---
> L_LOCAL_SOURCE := '''STANDARD''';
3702a3769,3772
> L_TEXT := REPLACE(L_TEXT, '%fetch%',
> ' sys.dbms_ash.fetch_obj_name(object, '
> || CONTEXT.LOCAL_DBID || ',' || L_CONDBID_COL || ',''N'','
> || L_LOCAL_SOURCE || ',' || L_IS_OLD || ',' || L_TIME_LIMIT || ')');
3794c3864
< , n.common as "c" )))) as xml
---
> , n.common as "co" )))) as xml
4009c4079
< TORET := DBMS_ASSERT.SIMPLE_SQL_NAME(FROMTABLE);
---
> TORET := SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(FROMTABLE);
4105a4176
> L_ROWS_PER_BUCKET NUMBER;
4134c4205,4211
< CONTEXT.EXP_ROW_COUNT := OMC_DEF_ROWS_PER_BUCKET * CONTEXT.BUCKETCOUNT;
---
> L_ROWS_PER_BUCKET :=
> (CASE WHEN CONTEXT.RESOLUTION = OMC_LOW_RESOLUTION
> THEN OMC_LOW_ROWS_PER_BUCKET
> WHEN CONTEXT.RESOLUTION = OMC_MED_RESOLUTION
> THEN OMC_MED_ROWS_PER_BUCKET
> ELSE OMC_HIGH_ROWS_PER_BUCKET END);
> CONTEXT.EXP_ROW_COUNT := L_ROWS_PER_BUCKET * CONTEXT.BUCKETCOUNT;
4384c4461
< AND a.snap_id <= @E_SNAP@
---
> AND a.snap_id <= @E_SNAP@ + 5
4771a4849
> L_CONTEXT_XML XMLTYPE;
4817c4895,4896
< IF CONTEXT.EXP_ROW_COUNT IS NULL OR CONTEXT.EXP_ROW_COUNT <= 1 THEN
---
> IF CONTEXT.EXP_ROW_COUNT IS NULL OR CONTEXT.EXP_ROW_COUNT <= 1
> OR CONTEXT.RESOLUTION = OMC_MAX_RESOLUTION THEN
4840a4920
> L_CONTEXT_XML := CONTEXTTOXML(CONTEXT);
4851c4931
< L_SYS_INFO,L_TIMING, P_INPUT,
---
> L_SYS_INFO,L_TIMING, L_CONTEXT_XML, P_INPUT,
4888a4969,4970
>
>
4892,4894c4974,5007
< FUNCTION FETCH_SQLTEXT_LOCAL(P_SQLID IN VARCHAR, P_DBID IN NUMBER,
< P_TIME_LIMIT IN VARCHAR)
< RETURN VARCHAR
---
> FUNCTION CONSTRUCT_SQL_ELEMENT(P_SQLTEXT IN VARCHAR, P_COMMAND_ID IN NUMBER)
> RETURN XMLTYPE
> IS
> L_RESULT XMLTYPE;
> L_COMMAND_NAME VARCHAR2(64);
> BEGIN
> IF P_SQLTEXT IS NULL THEN
> RETURN NULL;
> END IF;
> IF P_COMMAND_ID IS NOT NULL THEN
> SELECT MAX(COMMAND_NAME) INTO L_COMMAND_NAME
> FROM SYS.V_$SQLCOMMAND
> WHERE COMMAND_TYPE = P_COMMAND_ID;
> END IF;
>
> SELECT XMLELEMENT("a",
> XMLELEMENT("c", L_COMMAND_NAME),
> XMLELEMENT("s", XMLCDATA(P_SQLTEXT)))
> INTO L_RESULT
> FROM SYS.DUAL;
>
> RETURN L_RESULT;
> END CONSTRUCT_SQL_ELEMENT;
>
>
>
>
>
>
>
>
>
> FUNCTION FETCH_SQLTEXT_MEMORY(P_SQLID IN VARCHAR, P_TIME_LIMIT IN BOOLEAN)
> RETURN XMLTYPE
4896a5010
> L_COMMAND_ID NUMBER;
4900c5014
< IF P_TIME_LIMIT = 'Y' AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
---
> IF P_TIME_LIMIT AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
4907,4914c5021,5027
< ' SELECT max(substr(sql_text,1,:1))
< FROM v$sql
< WHERE sql_id = :2
< AND rownum <= 1 '
< INTO L_TEXT USING OMC_DEF_SQLTEXT_LEN, P_SQLID;
<
<
<
---
> ' SELECT max(substr(sql_text,1,:1)), max(command_type)
> FROM (
> SELECT sql_text, command_type
> FROM sys.v_$sql
> WHERE sql_id = :2
> AND rownum <= 1)'
> INTO L_TEXT, L_COMMAND_ID USING OMC_DEF_SQLTEXT_LEN, P_SQLID;
4918c5031
< RETURN FETCH_SQLTEXT_AWR(P_SQLID, P_DBID, 'N', P_TIME_LIMIT);
---
> RETURN NULL;
4920,4921c5033,5037
< RETURN STR_TO_ASCII(L_TEXT);
< END FETCH_SQLTEXT_LOCAL;
---
> RETURN CONSTRUCT_SQL_ELEMENT(STR_TO_ASCII(L_TEXT), L_COMMAND_ID);
>
>
> EXCEPTION WHEN OTHERS THEN RETURN NULL;
> END FETCH_SQLTEXT_MEMORY;
4922a5039,5051
>
>
>
>
>
>
>
>
>
>
>
>
>
4924,4925c5053,5054
< P_IS_PDB IN VARCHAR, P_TIME_LIMIT IN VARCHAR)
< RETURN VARCHAR
---
> P_SOURCE IN VARCHAR, P_TIME_LIMIT IN BOOLEAN)
> RETURN XMLTYPE
4926a5056
> L_SQLTEXT VARCHAR2(4000);
4927a5058
> L_COMMAND_ID NUMBER;
4931c5062
< IF P_TIME_LIMIT = 'Y' AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
---
> IF P_TIME_LIMIT AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
4937,4954c5068,5079
< IF P_IS_PDB = 'N' THEN
< EXECUTE IMMEDIATE
< 'SELECT max(dbms_lob.substr(sql_text,:1,1))
< FROM dba_hist_sqltext
< WHERE sql_id = :2
< AND dbid = :3
< AND rownum <= 1'
< INTO L_TEXT
< USING OMC_DEF_SQLTEXT_LEN, P_SQLID, P_DBID;
< ELSE
< EXECUTE IMMEDIATE
< 'SELECT max(dbms_lob.substr(sql_text,:1,1))
< FROM awr_pdb_sqltext
< WHERE sql_id = :2
< AND dbid = :3
< AND rownum <= 1'
< INTO L_TEXT
< USING OMC_DEF_SQLTEXT_LEN, P_SQLID, P_DBID;
---
> L_SQLTEXT :=
> 'SELECT max(dbms_lob.substr(sql_text,:1,1)), MAX(command_type)
> FROM (
> SELECT sql_text, command_type
> FROM dba_hist_sqltext
> WHERE sql_id = :2
> AND dbid = :3
> AND rownum <= 1)';
> IF P_SOURCE = 'PDB' THEN
> L_SQLTEXT := REPLACE(L_SQLTEXT, 'dba_hist_', 'awr_pdb_');
> ELSIF P_SOURCE = 'ROOT' THEN
> L_SQLTEXT := REPLACE(L_SQLTEXT, 'dba_hist_', 'awr_root_');
4955a5081,5085
>
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_TEXT, L_COMMAND_ID
> USING OMC_DEF_SQLTEXT_LEN, P_SQLID, P_DBID;
>
4957a5088,5169
> IF L_TEXT IS NULL THEN
> RETURN NULL;
> END IF;
> RETURN CONSTRUCT_SQL_ELEMENT(STR_TO_ASCII(L_TEXT), L_COMMAND_ID);
>
>
> EXCEPTION WHEN OTHERS THEN RETURN NULL;
> END FETCH_SQLTEXT_AWR;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION FETCH_SQLTEXT(P_SQLID IN VARCHAR,
> P_DBID IN NUMBER, P_CON_DBID IN NUMBER,
> P_IS_LOCAL IN VARCHAR, P_IS_PDB IN VARCHAR,
> P_IS_OLD IN VARCHAR, P_TIME_LIMIT IN VARCHAR)
> RETURN XMLTYPE
> IS
> L_IS_LOCAL BOOLEAN;
> L_IS_PDB BOOLEAN;
> L_IS_OLD BOOLEAN;
> L_TIME_LIMIT BOOLEAN;
> L_RESULT XMLTYPE := NULL;
> BEGIN
> IF P_DBID IS NULL THEN
> RETURN NULL;
> END IF;
> IF UPPER(P_IS_LOCAL) = 'Y' THEN
> L_IS_LOCAL := TRUE;
> ELSE
> L_IS_LOCAL := FALSE;
> END IF;
> IF UPPER(P_IS_PDB) = 'Y' THEN
> L_IS_PDB := TRUE;
> ELSE
> L_IS_PDB := FALSE;
> END IF;
> IF UPPER(P_IS_OLD) = 'Y' THEN
> L_IS_OLD := TRUE;
> ELSE
> L_IS_OLD := FALSE;
> END IF;
> IF UPPER(P_TIME_LIMIT) = 'Y' THEN
> L_TIME_LIMIT := TRUE;
> ELSE
> L_TIME_LIMIT := FALSE;
> END IF;
4958a5171,5189
> IF L_IS_LOCAL THEN
> L_RESULT := FETCH_SQLTEXT_MEMORY(P_SQLID, L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> IF ((NOT L_IS_PDB) OR (L_IS_PDB AND L_IS_OLD)) THEN
> L_RESULT := FETCH_SQLTEXT_AWR(P_SQLID, P_DBID, 'DBA', L_TIME_LIMIT);
> ELSE
> L_RESULT := FETCH_SQLTEXT_AWR(P_SQLID, P_CON_DBID, 'PDB', L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> L_RESULT := FETCH_SQLTEXT_AWR(P_SQLID, P_DBID, 'ROOT', L_TIME_LIMIT);
> END IF;
> ELSIF L_IS_OLD THEN
> L_RESULT := FETCH_SQLTEXT_AWR(P_SQLID, P_DBID, 'DBA', L_TIME_LIMIT);
> ELSE
> L_RESULT := FETCH_SQLTEXT_AWR(P_SQLID, P_DBID, 'PDB', L_TIME_LIMIT);
> END IF;
4959a5191,5192
> RETURN L_RESULT;
> END FETCH_SQLTEXT;
4961,4962c5194,5199
< RETURN STR_TO_ASCII(L_TEXT);
< END FETCH_SQLTEXT_AWR;
---
>
>
>
>
>
>
4964,4966c5201,5230
< FUNCTION FETCH_OBJ_NAME_LOCAL(P_OBJ_ID IN NUMBER, P_DBID IN NUMBER,
< P_CON_DBID IN NUMBER, P_TIME_LIMIT IN VARCHAR)
< RETURN VARCHAR
---
>
>
>
>
> FUNCTION CONSTRUCT_OBJ_ELEMENT(P_NAME IN VARCHAR, P_TYPE IN VARCHAR)
> RETURN XMLTYPE
> IS
> L_RESULT XMLTYPE;
> BEGIN
> IF P_NAME IS NULL THEN
> RETURN NULL;
> END IF;
> SELECT XMLELEMENT("a",
> XMLELEMENT("n", P_NAME),
> XMLELEMENT("t", P_TYPE))
> INTO L_RESULT
> FROM SYS.DUAL;
> RETURN L_RESULT;
> END CONSTRUCT_OBJ_ELEMENT;
>
>
>
>
>
>
>
>
> FUNCTION FETCH_OBJ_NAME_DICT(P_OBJ_ID IN NUMBER, P_CON_DBID IN NUMBER,
> P_TIME_LIMIT IN BOOLEAN)
> RETURN XMLTYPE
4968a5233
> L_TYPE VARCHAR2(64);
4971a5237
> L_RESULT XMLTYPE;
4973,4977c5239
< L_NAME := FETCH_OBJ_NAME_AWR(P_OBJ_ID,P_DBID,P_CON_DBID,'N',P_TIME_LIMIT);
< IF L_NAME IS NOT NULL THEN
< RETURN STR_TO_ASCII(L_NAME);
< END IF;
< IF P_TIME_LIMIT = 'Y' AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
---
> IF P_TIME_LIMIT AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
4984,4988c5246,5253
< decode(subobject_name, NULL, NULL, '.' || subobject_name))
< FROM cdb_objects
< WHERE object_id = :1
< AND con_id = con_dbid_to_id(:2)
< AND rownum <= 1 ]';
---
> decode(subobject_name, NULL, NULL, '.' || subobject_name)),
> max(object_type)
> FROM (
> SELECT owner, object_name, subobject_name, object_type
> FROM cdb_objects
> WHERE object_id = :1
> AND con_id = con_dbid_to_id(:2)
> AND rownum <= 1 )]';
4990c5255
< INTO L_NAME
---
> INTO L_NAME, L_TYPE
4995,4998c5260,5266
< decode(subobject_name, NULL, NULL, '.' || subobject_name))
< FROM dba_objects
< WHERE object_id = :1
< AND rownum <= 1 ]';
---
> decode(subobject_name, NULL, NULL, '.' || subobject_name)),
> max(object_type)
> FROM (
> SELECT owner, object_name, subobject_name, object_type
> FROM dba_objects
> WHERE object_id = :1
> AND rownum <= 1) ]';
5000c5268
< INTO L_NAME
---
> INTO L_NAME, L_TYPE
5003,5009c5271,5282
< L_SECS := TIMING_TO_SECONDS(L_T, SYSTIMESTAMP);
< ADD_INFO_TIME := ADD_INFO_TIME + L_SECS;
<
<
<
< RETURN STR_TO_ASCII(L_NAME);
< END FETCH_OBJ_NAME_LOCAL;
---
> IF P_TIME_LIMIT THEN
> L_SECS := TIMING_TO_SECONDS(L_T, SYSTIMESTAMP);
> ADD_INFO_TIME := ADD_INFO_TIME + L_SECS;
> END IF;
> IF L_NAME IS NULL THEN
> RETURN NULL;
> END IF;
> RETURN CONSTRUCT_OBJ_ELEMENT(STR_TO_ASCII(L_NAME), L_TYPE);
>
>
> EXCEPTION WHEN OTHERS THEN RETURN NULL;
> END FETCH_OBJ_NAME_DICT;
5010a5284,5294
>
>
>
>
>
>
>
>
>
>
>
5012,5014c5296,5298
< P_CON_DBID IN NUMBER, P_IS_PDB IN VARCHAR,
< P_TIME_LIMIT IN VARCHAR)
< RETURN VARCHAR
---
> P_CON_DBID IN NUMBER, P_SOURCE IN VARCHAR,
> P_TIME_LIMIT IN BOOLEAN)
> RETURN XMLTYPE
5016a5301
> L_TYPE VARCHAR2(64);
5018c5303
< L_T TIMESTAMP := SYSTIMESTAMP;
---
> L_T TIMESTAMP;
5021c5306
< IF P_TIME_LIMIT = 'Y' AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
---
> IF P_TIME_LIMIT AND ADD_INFO_TIME >= ADD_INFO_BUDGET THEN
5023a5309
> L_T := SYSTIMESTAMP;
5025c5311
< q'[SELECT max(name)
---
> q'[SELECT max(name), max(object_type)
5028,5029c5314,5316
< decode(subobject_name, NULL, NULL, '.' || subobject_name) as name
< FROM @AWRTAB@seg_stat_obj
---
> decode(subobject_name, NULL, NULL, '.' || subobject_name) as name,
> object_type
> FROM dba_hist_seg_stat_obj
5034,5037c5321,5325
< IF P_IS_PDB = 'Y' THEN
< L_TEXT := REPLACE(L_TEXT, '@AWRTAB@', 'awr_pdb_');
< ELSE
< L_TEXT := REPLACE(L_TEXT, '@AWRTAB@', 'dba_hist_');
---
> IF P_SOURCE = 'PDB' THEN
> L_TEXT := REPLACE(L_TEXT, 'dba_hist_', 'awr_pdb_');
> END IF;
> IF P_SOURCE = 'ROOT' THEN
> L_TEXT := REPLACE(L_TEXT, 'dba_hist_', 'awr_root_');
5042c5330
< INTO L_NAME
---
> INTO L_NAME, L_TYPE
5047c5335
< INTO L_NAME
---
> INTO L_NAME, L_TYPE
5050,5051c5338,5349
< L_SECS := TIMING_TO_SECONDS(L_T, SYSTIMESTAMP);
< ADD_INFO_TIME := ADD_INFO_TIME + L_SECS;
---
> IF P_TIME_LIMIT THEN
> L_SECS := TIMING_TO_SECONDS(L_T, SYSTIMESTAMP);
> ADD_INFO_TIME := ADD_INFO_TIME + L_SECS;
> END IF;
> IF L_NAME IS NULL THEN
> RETURN NULL;
> END IF;
> RETURN CONSTRUCT_OBJ_ELEMENT(STR_TO_ASCII(L_NAME), L_TYPE);
>
>
> EXCEPTION WHEN OTHERS THEN RETURN NULL;
> END FETCH_OBJ_NAME_AWR;
5052a5351,5421
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION FETCH_OBJ_NAME(P_OBJ_ID IN NUMBER, P_DBID IN NUMBER,
> P_CON_DBID IN NUMBER, P_IS_LOCAL IN VARCHAR,
> P_LOCAL_TYPE IN VARCHAR, P_IS_OLD IN VARCHAR,
> P_TIME_LIMIT IN VARCHAR)
> RETURN XMLTYPE
> IS
> L_RESULT XMLTYPE := NULL;
> L_TIME_LIMIT BOOLEAN;
> BEGIN
> IF UPPER(P_TIME_LIMIT) = 'Y' THEN
> L_TIME_LIMIT := TRUE;
> ELSE
> L_TIME_LIMIT := FALSE;
> END IF;
5053a5423,5466
> IF UPPER(P_IS_LOCAL) = 'Y' THEN
> IF UPPER(P_LOCAL_TYPE) = 'ROOT' THEN
> L_RESULT := FETCH_OBJ_NAME_DICT(P_OBJ_ID, P_CON_DBID, L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_DBID, P_CON_DBID,
> 'HIST', L_TIME_LIMIT);
> ELSIF UPPER(P_LOCAL_TYPE) = 'PDB' THEN
> IF UPPER(P_IS_OLD) = 'Y' THEN
> L_RESULT := FETCH_OBJ_NAME_DICT(P_OBJ_ID, NULL, L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_DBID, P_CON_DBID,
> 'HIST', L_TIME_LIMIT);
> ELSE
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_CON_DBID, NULL,
> 'PDB', L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> L_RESULT := FETCH_OBJ_NAME_DICT(P_OBJ_ID, NULL, L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_DBID, P_CON_DBID,
> 'ROOT', L_TIME_LIMIT);
> END IF;
> ELSE
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_DBID, NULL,
> 'HIST', L_TIME_LIMIT);
> IF L_RESULT IS NOT NULL THEN
> RETURN L_RESULT;
> END IF;
> L_RESULT := FETCH_OBJ_NAME_DICT(P_OBJ_ID, NULL, L_TIME_LIMIT);
> END IF;
> ELSIF UPPER(P_LOCAL_TYPE) = 'PDB' THEN
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_DBID, P_CON_DBID,
> 'PDB', L_TIME_LIMIT);
> ELSE
> L_RESULT := FETCH_OBJ_NAME_AWR(P_OBJ_ID, P_DBID, P_CON_DBID,
> 'HIST', L_TIME_LIMIT);
> END IF;
5055,5056c5468,5469
< RETURN STR_TO_ASCII(L_NAME);
< END FETCH_OBJ_NAME_AWR;
---
> RETURN L_RESULT;
> END FETCH_OBJ_NAME;
5057a5471,5479
>
>
>
>
>
>
>
>
>
5091,5093d5512
<
<
<
5094a5514,5516
>
>
> EXCEPTION WHEN OTHERS THEN RETURN NULL;
5096a5519,5527
>
>
>
>
>
>
>
>
>
5128,5130d5558
<
<
<
5131a5560,5562
>
>
> EXCEPTION WHEN OTHERS THEN RETURN NULL;
5208a5640
> L_RESOLUTION VARCHAR2(100);
5227a5660
> ,T.RESOLUTION AS RESOLUTION
5240a5674
> ,RESOLUTION VARCHAR2(100) PATH 'resolution'
5267a5702
> L_RESOLUTION := A.RESOLUTION;
5314c5749
< L_AWR_INFO);
---
> L_AWR_INFO, L_RESOLUTION);
5318c5753,5754
< L_SHOW_SQL, L_VERBOSE_XML, L_INSTANCE_NUMBER, L_AWR_INFO);
---
> L_SHOW_SQL, L_VERBOSE_XML, L_INSTANCE_NUMBER, L_AWR_INFO,
> L_RESOLUTION);
5322c5758,5759
< L_SHOW_SQL, L_VERBOSE_XML, L_INSTANCE_NUMBER, L_AWR_INFO);
---
> L_SHOW_SQL, L_VERBOSE_XML, L_INSTANCE_NUMBER, L_AWR_INFO,
> L_RESOLUTION);
5328c5765,5766
< L_INCLUDE_BG, L_INSTANCE_NUMBER, L_MINIMIZE_COST);
---
> L_INCLUDE_BG, L_INSTANCE_NUMBER, L_MINIMIZE_COST,
> L_RESOLUTION);
5333c5771,5772
< L_INCLUDE_BG, L_INSTANCE_NUMBER, L_MINIMIZE_COST);
---
> L_INCLUDE_BG, L_INSTANCE_NUMBER, L_MINIMIZE_COST,
> L_RESOLUTION);
5338c5777,5778
< L_MINIMIZE_COST);
---
> L_MINIMIZE_COST,
> L_RESOLUTION);
5344c5784,5785
< L_INCLUDE_BG, L_INSTANCE_NUMBER);
---
> L_INCLUDE_BG, L_INSTANCE_NUMBER,
> L_RESOLUTION);
5349c5790,5791
< L_INCLUDE_BG, L_INSTANCE_NUMBER);
---
> L_INCLUDE_BG, L_INSTANCE_NUMBER,
> L_RESOLUTION);
5353c5795,5796
< L_SHOW_SQL, L_VERBOSE_XML, L_INCLUDE_BG, L_INSTANCE_NUMBER);
---
> L_SHOW_SQL, L_VERBOSE_XML, L_INCLUDE_BG, L_INSTANCE_NUMBER,
> L_RESOLUTION);
5403c5846,5847
< , IGNORE_CPU_HISTORY IN VARCHAR := 'n')
---
> , IGNORE_CPU_HISTORY IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5411c5855,5856
< NVL(AWR_INFO,'n'), NVL(IGNORE_CPU_HISTORY,'n'));
---
> NVL(AWR_INFO,'n'), NVL(IGNORE_CPU_HISTORY,'n'),
> NVL(RESOLUTION,'medium'));
5418a5864
> ,NVL(RESOLUTION,'medium') AS "resolution"
5450c5896,5897
< , AWR_INFO IN VARCHAR2 := 'n')
---
> , AWR_INFO IN VARCHAR2 := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5459c5906,5907
< INSTANCE_NUMBER,'n',NVL(AWR_INFO,'n'));
---
> INSTANCE_NUMBER,'n',NVL(AWR_INFO,'n'),
> NVL(RESOLUTION,'medium'));
5467a5916
> ,NVL(RESOLUTION,'medium') AS "resolution"
5499c5948,5949
< , IGNORE_CPU_HISTORY IN VARCHAR := 'n')
---
> , IGNORE_CPU_HISTORY IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5509c5959,5960
< NVL(IGNORE_CPU_HISTORY,'n'));
---
> NVL(IGNORE_CPU_HISTORY,'n'),
> NVL(RESOLUTION,'medium'));
5519a5971
> ,NVL(RESOLUTION,'medium') AS "resolution"
5549c6001,6002
< , IGNORE_CPU_HISTORY IN VARCHAR := 'n')
---
> , IGNORE_CPU_HISTORY IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5561c6014,6015
< MINIMIZE_COST,'n',IGNORE_CPU_HISTORY);
---
> MINIMIZE_COST,'n',IGNORE_CPU_HISTORY,
> NVL(RESOLUTION,'medium'));
5570a6025
> ,RESOLUTION AS "resolution"
5614c6069,6070
< , MINIMIZE_COST IN VARCHAR := 'n')
---
> , MINIMIZE_COST IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5627c6083,6084
< INSTANCE_NUMBER, MINIMIZE_COST,'n');
---
> INSTANCE_NUMBER, MINIMIZE_COST,'n',
> NVL(RESOLUTION,'medium'));
5637a6095
> ,RESOLUTION AS "resolution"
5679c6137,6138
< , IGNORE_CPU_HISTORY IN VARCHAR := 'n')
---
> , IGNORE_CPU_HISTORY IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5692c6151,6152
< MINIMIZE_COST,'n',IGNORE_CPU_HISTORY);
---
> MINIMIZE_COST,'n',IGNORE_CPU_HISTORY,
> NVL(RESOLUTION,'medium'));
5704a6165
> ,RESOLUTION AS "resolution"
5741c6202,6203
< , IGNORE_CPU_HISTORY IN VARCHAR := 'n')
---
> , IGNORE_CPU_HISTORY IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5748c6210,6211
< NVL(IGNORE_CPU_HISTORY,'n'));
---
> NVL(IGNORE_CPU_HISTORY,'n'),
> NVL(RESOLUTION,'medium'));
5775c6238,6239
< , INSTANCE_NUMBER IN NUMBER := NULL)
---
> , INSTANCE_NUMBER IN NUMBER := NULL
> , RESOLUTION IN VARCHAR2 := 'medium')
5781c6245,6246
< NVL(INCLUDE_BG,'n'), INSTANCE_NUMBER, 'n');
---
> NVL(INCLUDE_BG,'n'), INSTANCE_NUMBER, 'n',
> NVL(RESOLUTION,'medium'));
5808c6273,6274
< , IGNORE_CPU_HISTORY IN VARCHAR := 'n')
---
> , IGNORE_CPU_HISTORY IN VARCHAR := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5816c6282,6283
< NVL(IGNORE_CPU_HISTORY,'n'));
---
> NVL(IGNORE_CPU_HISTORY,'n'),
> NVL(RESOLUTION,'medium'));
5839c6306,6307
< , MINIMIZE_COST IN VARCHAR2 := 'n')
---
> , MINIMIZE_COST IN VARCHAR2 := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5845c6313,6314
< NVL(INCLUDE_BG,'n'), INSTANCE_NUMBER, NVL(MINIMIZE_COST,'n'),'n');
---
> NVL(INCLUDE_BG,'n'), INSTANCE_NUMBER, NVL(MINIMIZE_COST,'n'),'n',
> NVL(RESOLUTION,'medium'));
5873c6342,6343
< , MINIMIZE_COST IN VARCHAR2 := 'n')
---
> , MINIMIZE_COST IN VARCHAR2 := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5879c6349,6350
< NVL(INCLUDE_BG,'n'), INSTANCE_NUMBER, NVL(MINIMIZE_COST,'n'));
---
> NVL(INCLUDE_BG,'n'), INSTANCE_NUMBER, NVL(MINIMIZE_COST,'n'),
> NVL(RESOLUTION,'medium'));
5907c6378,6379
< , MINIMIZE_COST IN VARCHAR2 := 'n')
---
> , MINIMIZE_COST IN VARCHAR2 := 'n'
> , RESOLUTION IN VARCHAR2 := 'medium')
5914c6386,6387
< NVL(MINIMIZE_COST,'n'),'n');
---
> NVL(MINIMIZE_COST,'n'),'n',
> NVL(RESOLUTION,'medium'));
457a458,485
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> PROCEDURE DDL_EXECUTE_CALLOUT(
> STMT IN VARCHAR2)
> IS
> EXTERNAL NAME "kapiDDLExecute" WITH CONTEXT
> PARAMETERS(CONTEXT,
> STMT OCISTRING, STMT INDICATOR SB4)
> LIBRARY DBMS_AUTO_INDEX_LIB;
>
527c555,558
< EXECUTE IMMEDIATE STMT;
---
>
>
>
> DDL_EXECUTE_CALLOUT('/*AUTO_INDEX:ddl*/' || STMT);
323a324,325 > > 327c329 < AI_STS_CAPTURE_TASK_ON; --- > AI_STS_CAPTURE_TASK_OFF;
5485a5486,5496 > IF (TRCLVL = 0) THEN > EXECUTE IMMEDIATE 'alter session set "_kdlu_trace_system"=0'; > EXECUTE IMMEDIATE 'alter session set "_kdlu_trace_layer"=0'; > EXECUTE IMMEDIATE 'alter session set "_securefile_timers"=FALSE'; > ELSE > EXECUTE IMMEDIATE 'alter session set "_kdlu_trace_system"=1532'; > EXECUTE IMMEDIATE 'alter session set "_kdlu_trace_layer"=1048576'; > EXECUTE IMMEDIATE 'alter session set "_securefile_timers"=TRUE'; > END IF; > > 5513a5525 > TIME TIMESTAMP := SYSTIMESTAMP; 5517a5530,5532 > TO_CHAR(TIME, 'HH24:MI:SS') || > '# > ' ||
158,159c158,159 < < --- > > 163a164,173 > > IF (INSTR(TEXT_OF_DDL, 'UTL_RAW.CAST_TO_RAW') > 0) THEN > TEXT_OF_DDL := DBMS_HADOOP_INTERNAL.EVAL_PART_KEY_OPERATOR(TEXT_OF_DDL, 'UTL_RAW.CAST_TO_RAW'); > END IF; > IF (INSTR(TEXT_OF_DDL, 'TO_DATE') > 0) THEN > TEXT_OF_DDL := DBMS_HADOOP_INTERNAL.EVAL_PART_KEY_OPERATOR(TEXT_OF_DDL, 'TO_DATE'); > END IF; > IF (INSTR(TEXT_OF_DDL, 'TO_TIMESTAMP') > 0) THEN > TEXT_OF_DDL := DBMS_HADOOP_INTERNAL.EVAL_PART_KEY_OPERATOR(TEXT_OF_DDL, 'TO_TIMESTAMP'); > END IF;
322a323
> TMP_DDL CLOB := ORIG_DDL;
324a326,332
>
>
>
> TMP_DDL := REPLACE(TMP_DDL, 'COLLATE "USING_NLS_COMP"', '');
> TMP_DDL := REPLACE(TMP_DDL, 'DEFAULT COLLATION "USING_NLS_COMP"', '');
>
>
326c334
< COLKEYS := SUBSTR(ORIG_DDL, INSTR(ORIG_DDL, '(')+1);
---
> COLKEYS := SUBSTR(TMP_DDL, INSTR(TMP_DDL, '(')+1);
1405c1413
< AND DBMS_HADOOP_INTERNAL.GET_OBJNO_FROM_PARTITIONED_ET(DT.TABLE_NAME,
---
> AND DBMS_HADOOP_INTERNAL.GET_OBJNO_FROM_PARTITIONED_ET(DT.CLUSTER_ID,
1489a1498,1552
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION EVAL_PART_KEY_OPERATOR(TEXT_OF_DDL IN OUT CLOB, KEY VARCHAR2)
> RETURN CLOB
> IS
> KEYSTR CLOB;
> RAWVAL RAW(256);
> STARTPOS NUMBER := 0;
> VALSTR VARCHAR2(4000);
> REPLACESTR VARCHAR2(4000);
> COUNTOFKEY NUMBER := 0;
> BEGIN
> COUNTOFKEY := REGEXP_COUNT(TEXT_OF_DDL, KEY);
>
>
>
>
>
>
> FOR I IN 1..COUNTOFKEY
> LOOP
> STARTPOS := INSTR(TEXT_OF_DDL, KEY);
>
> KEYSTR := SUBSTR(TEXT_OF_DDL, STARTPOS + LENGTH(KEY)+2);
> KEYSTR := SUBSTR(KEYSTR, 0, INSTR(KEYSTR, ')')-2);
>
> IF (KEY = 'UTL_RAW.CAST_TO_RAW') THEN
> RAWVAL := UTL_RAW.CAST_TO_RAW(KEYSTR);
> VALSTR := '''' || RAWVAL || '''';
> ELSIF (KEY = 'TO_DATE') THEN
> VALSTR := TO_CHAR(TO_DATE(KEYSTR, 'YYYY-MM-DD'));
> VALSTR := '''' || VALSTR || '''';
> ELSIF (KEY = 'TO_TIMESTAMP') THEN
> VALSTR := TO_CHAR(TO_TIMESTAMP(KEYSTR, 'YYYY-MM-DD HH24:MI:SS:FF'));
> VALSTR := '''' || VALSTR || '''';
> END IF;
>
> REPLACESTR := SUBSTR(TEXT_OF_DDL, STARTPOS, LENGTH(KEYSTR) + LENGTH(KEY)+4);
>
> TEXT_OF_DDL := REPLACE(TEXT_OF_DDL, REPLACESTR, VALSTR);
> END LOOP;
>
> RETURN TEXT_OF_DDL;
> END EVAL_PART_KEY_OPERATOR;
5045,5046c5045,5046 < IF TRACING THEN < SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, --- > IF TRACING THEN > SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 5048c5048 < SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, --- > SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 5050,5051c5050,5060 < END IF; < RAISE; --- > END IF; > > > IF LOCK_ERROR = 0 THEN > LOCK_ERROR := DBMS_LOCK.RELEASE(LOCKHANDLE=>LOCK_HANDLE); > IF TRACING THEN > SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, > 'Releasing evaluation lock with error ' || LOCK_ERROR); > END IF; > END IF; > RAISE;
66a67,120
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> PROCEDURE DDL_EXECUTE_3GL(DDLTXT IN CLOB, USR IN BINARY_INTEGER DEFAULT 0) AS
> EXTERNAL
> NAME "kkziImplDdl"
> LIBRARY DBMS_SNAPSHOT_LIB
> LANGUAGE C
> WITH CONTEXT
> PARAMETERS
> (CONTEXT,
> DDLTXT OCILOBLOCATOR, DDLTXT INDICATOR SB2,
> USR UB4
> );
>
>
>
>
>
>
>
>
>
>
>
>
>
> PROCEDURE DDL_EXECUTE(DDLTXT IN CLOB, USR IN BINARY_INTEGER DEFAULT 0) AS
> BEGIN
> WRITE_TRACE('Executing DDL :'||DDLTXT);
>
> DDL_EXECUTE_3GL(DDLTXT, USR);
> COMMIT;
>
> WRITE_TRACE('Executing DDL : Succeeded');
> EXCEPTION
> WHEN OTHERS THEN
> WRITE_TRACE('Executing DDL : Failed with '|| SQLERRM);
> RAISE;
> END;
>
>
>
264c318
< EXECUTE IMMEDIATE L_STRSQL;
---
> DDL_EXECUTE(L_STRSQL);
415c469
< EXECUTE IMMEDIATE RESULT_SQLSTR;
---
> DDL_EXECUTE(RESULT_SQLSTR);
1255,1258d1254 < IF SSLWALLETPASSWD IS NULL THEN < DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR(-31221); < < END IF; 1276,1279d1271 < END IF; < < IF SSLWALLETPASSWD IS NULL THEN < RETURN INVALID_SSLWALLETPASSWD;
1019a1020,1023 > L_ADDM_ELAPSED NUMBER := 0; > L_ADDM_CPU NUMBER := 0; > > 1044a1049 > L_TZ VARCHAR2(10) := NULL; 1047a1053,1057 > > > L_AWR_INFO VARCHAR2(8) := 'y'; > > 1084a1095,1098 > > L_START_TIME_ADDM VARCHAR2(32767) := NULL; > L_END_TIME_ADDM VARCHAR2(32767) := NULL; > 1454a1469,1472 > L_TZ := DBMS_SQLTUNE_UTIL2.GET_TZ_OFFSET(); > > > 1463,1476c1481,1489 < IF (L_IS_REALTIME = 1) THEN < L_TIME_MODE := 'realtime'; < L_BEGIN_TIME_UTC := < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_RT_OUTER_START_TIME) AS DATE), < DBMS_REPORT.DATE_FMT); < L_TIME_SINCE_SEC := (SYSDATE - L_RT_OUTER_START_TIME)*86400; < < ELSE < L_TIME_MODE := 'historical'; < L_BEGIN_TIME_UTC := < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_OUTER_START_TIME) AS DATE), < DBMS_REPORT.DATE_FMT); < L_TIME_SINCE_SEC := (SYSDATE - L_OUTER_START_TIME)*86400; < END IF; --- > L_TIME_MODE := 'historical'; > L_BEGIN_TIME_UTC := TO_CHAR(L_OUTER_START_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; > L_BEGIN_TIME_UTC := > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_BEGIN_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), > DBMS_REPORT.DATE_FMT); > L_TIME_SINCE_SEC := (SYSDATE - L_OUTER_START_TIME)*86400; 1477a1491,1492 > L_END_TIME_UTC := TO_CHAR(L_OUTER_END_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; 1479c1494,1496 < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_OUTER_END_TIME) AS DATE), --- > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_END_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), 1488a1506 > AWR_INFO => L_AWR_INFO, 1637a1656,1658 > > L_BEGIN_TIME_UTC := TO_CHAR(L_SELECTED_START_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; 1639,1640c1660,1666 < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_SELECTED_START_TIME) AS DATE), < DBMS_REPORT.DATE_FMT); --- > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_BEGIN_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), > DBMS_REPORT.DATE_FMT); > > L_END_TIME_UTC := TO_CHAR(L_SELECTED_END_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; 1642,1643c1668,1672 < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_SELECTED_END_TIME) AS DATE), < DBMS_REPORT.DATE_FMT); --- > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_END_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), > DBMS_REPORT.DATE_FMT); > 1747,1749c1776 < IF (L_IS_REALTIME = 1 AND L_SPOTREP = 0 < AND LOWER(REPORT_LEVEL) != REPORT_LEVEL_WATCHDOG < AND L_OUTER_END_TIME = L_SELECTED_END_TIME) THEN --- > IF(IS_OMX = 1) THEN 1750a1778,1807 > DBMS_REPORT.GET_TIMING_INFO(0, L_ADDM_ELAPSED, L_ADDM_CPU); > > IF(L_IS_REALTIME = 1) THEN > > L_START_TIME_ADDM := TO_CHAR(L_OUTER_START_TIME, > 'mm/dd/yyyy hh24:mi:ss'); > L_END_TIME_ADDM := TO_CHAR(L_OUTER_END_TIME, > 'mm/dd/yyyy hh24:mi:ss'); > > ELSE > L_START_TIME_ADDM := TO_CHAR(L_SELECTED_START_TIME, > 'mm/dd/yyyy hh24:mi:ss'); > L_END_TIME_ADDM := TO_CHAR(L_SELECTED_END_TIME, > 'mm/dd/yyyy hh24:mi:ss'); > > END IF; > > L_ADDM_XML := SYS.PRVT_HDM.ADDM_REPORT_XML( > P_DBID => NULL, > P_INST_ID => INST_ID, > P_BEGIN_TIME => L_START_TIME_ADDM, > P_END_TIME => L_END_TIME_ADDM, > P_DAYS => NULL, > P_OWNER => NULL, > P_TASK_NAME => NULL, > P_SECTION => 'ALL', > P_SPOTREP => NULL, > P_SPOTLIST => NULL, > P_SHOW_SQL => 0); > 1751a1809 > DBMS_REPORT.GET_TIMING_INFO(1,L_ADDM_ELAPSED,L_ADDM_CPU); 1753,1754c1811,1812 < L_SPOTREP := 1; < END IF; --- > L_REPORT_REFERENCE := DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT( > 'addm','main',L_REF_PARAMS); 1756,1760c1814,1817 < IF (LOWER(REPORT_LEVEL) = REPORT_LEVEL_WATCHDOG) THEN < L_COMPRESS_ADDM := 0; < ELSE < L_COMPRESS_ADDM := 1; < END IF; --- > > IF (L_ADDM_ELAPSED < 0) THEN > L_ADDM_ELAPSED := 0; > END IF; 1762,1765c1819,1851 < < < < IF (L_IS_REALTIME = 1) THEN --- > IF (L_ADDM_CPU < 0) THEN > L_ADDM_CPU := 0; > END IF; > > L_REPORT_XML := PRVT_REPORT_TAGS.BUILD_REPORT_TAG( > L_REPORT_REFERENCE,L_ADDM_ELAPSED,L_ADDM_CPU); > > L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML( > XML_ROOT,L_ACTIVE_REPORT_PARAM_XML); > > L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,L_ADDM_XML); > > L_ADDM_XML := L_REPORT_XML; > > ELSE > > IF (L_IS_REALTIME = 1 AND L_SPOTREP = 0 > AND LOWER(REPORT_LEVEL) != REPORT_LEVEL_WATCHDOG > AND L_OUTER_END_TIME = L_SELECTED_END_TIME) THEN > > > > L_SPOTREP := 1; > END IF; > > IF (LOWER(REPORT_LEVEL) = REPORT_LEVEL_WATCHDOG) THEN > > L_COMPRESS_ADDM := 0; > ELSE > L_COMPRESS_ADDM := 1; > END IF; > > 1768c1854,1857 < L_ADDM_XML := SYS.PRVT_AWR_VIEWER.REPORT_ADDM_XML( --- > IF (L_IS_REALTIME = 1) THEN > > > L_ADDM_XML := SYS.PRVT_AWR_VIEWER.REPORT_ADDM_XML( 1777,1779c1866,1868 < ELSE < < --- > ELSE > > 1781c1870 < L_ADDM_XML := SYS.PRVT_AWR_VIEWER.REPORT_ADDM_XML( --- > L_ADDM_XML := SYS.PRVT_AWR_VIEWER.REPORT_ADDM_XML( 1790a1880 > END IF; 2160a2251 > L_TZ VARCHAR2(10) := NULL; 2424a2516,2518 > > > L_TZ := DBMS_SQLTUNE_UTIL2.GET_TZ_OFFSET(); 2435,2439c2529 < IF (L_IS_REALTIME = 1) THEN < L_TIME_MODE := 'realtime'; < L_BEGIN_TIME_UTC := < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_RT_OUTER_START_TIME) AS DATE), < DBMS_REPORT.DATE_FMT); --- > L_TIME_MODE := 'historical'; 2441,2446c2531,2537 < L_TIME_SINCE_SEC := (SYSDATE - L_RT_OUTER_START_TIME)*86400; < ELSE < L_TIME_MODE := 'historical'; < L_BEGIN_TIME_UTC := < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_OUTER_START_TIME) AS DATE), < DBMS_REPORT.DATE_FMT); --- > L_BEGIN_TIME_UTC := TO_CHAR(L_OUTER_START_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; > L_BEGIN_TIME_UTC := > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_BEGIN_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), > DBMS_REPORT.DATE_FMT); 2448,2449c2539 < L_TIME_SINCE_SEC := (SYSDATE - L_OUTER_START_TIME)*86400; < END IF; --- > L_TIME_SINCE_SEC := (SYSDATE - L_OUTER_START_TIME)*86400; 2450a2541,2542 > L_END_TIME_UTC := TO_CHAR(L_OUTER_END_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; 2452c2544,2546 < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_OUTER_END_TIME) AS DATE), --- > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_END_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), 2469c2563 < --- > FILTER_LIST => L_FILTER_LIST_XML, 2517a2612,2613 > L_BEGIN_TIME_UTC := TO_CHAR(L_SELECTED_START_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; 2519c2615,2617 < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_SELECTED_START_TIME) AS DATE), --- > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_BEGIN_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), 2521a2620,2621 > L_END_TIME_UTC := TO_CHAR(L_SELECTED_END_TIME, > 'yyyy-mm-dd hh24:mi:ss') || L_TZ; 2523c2623,2625 < TO_CHAR(CAST(SYS_EXTRACT_UTC(L_SELECTED_END_TIME) AS DATE), --- > TO_CHAR(CAST(SYS_EXTRACT_UTC( > TO_TIMESTAMP_TZ(L_END_TIME_UTC, > 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE), 3157,3158c3259 < < --- > FILTER_LIST => L_FILTER_LIST_XML,
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '19.07.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '19.07.01.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '19.06.01.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '19.06.02.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '19.07.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '19.08.00.00'; 6274c6274 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6480c6480 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6642c6642 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 6729c6729 < DECODE(A.NEXT_CHANGE#, HIGHSCNVAL, -2, A.STAMP) STAMP, --- > DECODE(A.ARCHIVED, 'NO', -2, A.STAMP) STAMP, 7879,7892d7878 < WITH < MY_DBINC AS < (SELECT RESETLOGS_TIME, < RESETLOGS_CHANGE#, < PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# < FROM V$DATABASE_INCARNATION < START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN < AND RESETLOGS_TIME = THIS_RESET_TIME < CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# < UNION ALL < SELECT THIS_RESET_TIME RESETLOGS_TIME, < THIS_RESET_SCN RESETLOGS_CHANGE#, < NULL NEXT_RESETLOGS_CHANGE# < FROM DUAL) 7932c7918,7930 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC 8087c8085,8097 < FROM V$DATAFILE_COPY CDF, MY_DBINC --- > FROM V$DATAFILE_COPY CDF, > (SELECT RESETLOGS_TIME, > RESETLOGS_CHANGE#, > PRIOR RESETLOGS_CHANGE# NEXT_RESETLOGS_CHANGE# > FROM V$DATABASE_INCARNATION > START WITH RESETLOGS_CHANGE# = THIS_RESET_SCN > AND RESETLOGS_TIME = THIS_RESET_TIME > CONNECT BY PRIOR PRIOR_INCARNATION# = INCARNATION# > UNION ALL > SELECT THIS_RESET_TIME RESETLOGS_TIME, > THIS_RESET_SCN RESETLOGS_CHANGE#, > NULL NEXT_RESETLOGS_CHANGE# > FROM DUAL) MY_DBINC
26420a26421,26463 > > > > > > > > > > > > > > > > > > > > > > > > > > > > IF ( (LOCAL_DB = 1) > AND > (DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE() IN > (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)) > AND > (DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) > ) > THEN > TARGET_DBID := CON_DBID; > END IF; > >
683a684
>
686a688
> CLOUD_SERVICE_TYPE VARCHAR2(32);
689c691,713
< RETURN NVL(SYS_CONTEXT('userenv', 'cloud_service'), CLOUD_SERVICE_TYPE_NONE);
---
> SELECT
> CASE
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='PAAS' THEN
> CASE
> WHEN UPPER(MAX(PROPERTY_VALUE)) LIKE '%ADW.ORACLECLOUD.COM' THEN
> CLOUD_SERVICE_TYPE_ADW_D
> WHEN UPPER(MAX(PROPERTY_VALUE)) LIKE '%ATP.ORACLECLOUD.COM' THEN
> CLOUD_SERVICE_TYPE_ATP_D
> ELSE CLOUD_SERVICE_TYPE_OTHER
> END
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='DWCS' THEN
> CLOUD_SERVICE_TYPE_ADW_S
> WHEN UPPER(SYS_CONTEXT('USERENV','CLOUD_SERVICE'))='OLTP' THEN
> CLOUD_SERVICE_TYPE_ATP_S
> ELSE
> UPPER(NVL(SYS_CONTEXT('USERENV','CLOUD_SERVICE'),
> CLOUD_SERVICE_TYPE_NONE))
> END
> INTO CLOUD_SERVICE_TYPE
> FROM DATABASE_PROPERTIES
> WHERE UPPER(PROPERTY_NAME) = 'GLOBAL_DB_NAME';
>
> RETURN CLOUD_SERVICE_TYPE;
702a727,752
> FUNCTION GET_TZ_OFFSET
> RETURN VARCHAR2
> IS
> L_TZ VARCHAR2(10);
> BEGIN
>
>
> L_TZ := EXTRACT(TIMEZONE_HOUR FROM SYSTIMESTAMP) || ':' ||
> EXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP);
> RETURN L_TZ;
> END GET_TZ_OFFSET;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
704,705c754,768
< FUNCTION IS_ADW
< RETURN BOOLEAN
---
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION CHOOSEAWRFORPDB(
> BEGINTIME IN DATE)
> RETURN VARCHAR2
706a770,774
> L_AWR_LOCATION VARCHAR2(32) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> L_SQLTEXT VARCHAR2(4000);
> L_PDB_TIME DATE;
> L_ROOT_TIME DATE;
>
707a776,790
>
>
> L_SQLTEXT :=
> 'SELECT CAST(MAX(end_interval_time) AS DATE)
> FROM AWR_PDB_SNAPSHOT
> WHERE dbid = :1';
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_PDB_TIME
> USING SYS_CONTEXT('USERENV', 'CON_DBID');
>
> IF L_PDB_TIME IS NULL THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> RETURN L_AWR_LOCATION;
> END IF;
709,712c792,795
< IF (GET_CLOUD_SERVICE_TYPE() = CLOUD_SERVICE_TYPE_ADW) THEN
< RETURN TRUE;
< ELSE
< RETURN FALSE;
---
> IF L_PDB_TIME >= BEGINTIME THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB;
> RETURN L_AWR_LOCATION;
715c798,825
< END IS_ADW;
---
>
>
>
> L_SQLTEXT :=
> 'SELECT CAST(MAX(end_interval_time) AS DATE)
> FROM AWR_ROOT_SNAPSHOT
> WHERE dbid = :1';
> EXECUTE IMMEDIATE L_SQLTEXT
> INTO L_ROOT_TIME
> USING SYS_CONTEXT('USERENV', 'DBID');
>
> IF ((L_ROOT_TIME IS NOT NULL) AND
> (L_ROOT_TIME >= BEGINTIME)
> )
> THEN
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
> RETURN L_AWR_LOCATION;
>
> ELSE
>
> L_AWR_LOCATION := DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB;
> RETURN L_AWR_LOCATION;
> END IF;
>
> RETURN L_AWR_LOCATION;
>
> END CHOOSEAWRFORPDB;
7a8,13 > AWR_PREFIX_ROOT VARCHAR2(16) := 'sys.awr_root'; > AWR_PREFIX_PDB VARCHAR2(16) := 'sys.awr_pdb'; > G_CLOUD_SERVICE_TYPE CONSTANT VARCHAR2(32) := > DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE(); > > 379c385 < from sys.dba_hist_active_sess_history a --- > from #AWR_VIEW_PREFIX#_active_sess_history a 462c468 < from sys.dba_hist_pdb_instance)) c'); --- > from #AWR_VIEW_PREFIX#_pdb_instance)) c'); 485,502c491,550 < SELECT MIN(SNAP_ID) < INTO L_BEGIN_SNAP < FROM SYS.DBA_HIST_ASH_SNAPSHOT < WHERE DBID = L_DBID < AND INSTANCE_NUMBER = P_INST_ID < AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR P_START_TIME BETWEEN BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); < < < SELECT MAX(SNAP_ID) < INTO L_END_SNAP < FROM SYS.DBA_HIST_ASH_SNAPSHOT < WHERE DBID = L_DBID < AND INSTANCE_NUMBER = P_INST_ID < AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME < OR P_END_TIME BETWEEN BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); --- > > IF ((G_CLOUD_SERVICE_TYPE IN > (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S, > DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)) > AND > (L_IS_ROOT = FALSE)) > THEN > L_QRY := REPLACE(L_QRY,'#AWR_VIEW_PREFIX#', AWR_PREFIX_PDB); > > > SELECT MIN(SNAP_ID) > INTO L_BEGIN_SNAP > FROM SYS.AWR_PDB_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_START_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > > SELECT MAX(SNAP_ID) > INTO L_END_SNAP > FROM SYS.AWR_PDB_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_END_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > ELSE > > L_QRY := REPLACE(L_QRY,'#AWR_VIEW_PREFIX#', AWR_PREFIX_ROOT); > > > SELECT MIN(SNAP_ID) > INTO L_BEGIN_SNAP > FROM SYS.AWR_ROOT_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_START_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > > SELECT MAX(SNAP_ID) > INTO L_END_SNAP > FROM SYS.AWR_ROOT_ASH_SNAPSHOT > WHERE DBID = L_DBID > AND INSTANCE_NUMBER = P_INST_ID > AND (END_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR BEGIN_INTERVAL_TIME BETWEEN P_START_TIME AND P_END_TIME > OR P_END_TIME BETWEEN > BEGIN_INTERVAL_TIME AND END_INTERVAL_TIME); > > END IF; 1095c1143 < V_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC; --- > V_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC;
41a42,43 > > 54a57 > RESOLUTION IN VARCHAR2 := NULL, 74c77,78 < INSTANCE_NUMBER => INST_ID); --- > INSTANCE_NUMBER => INST_ID, > RESOLUTION => RESOLUTION); 84c88,89 < INSTANCE_NUMBER => INST_ID); --- > INSTANCE_NUMBER => INST_ID, > RESOLUTION => RESOLUTION); 96c101,102 < INSTANCE_NUMBER => INST_ID); --- > INSTANCE_NUMBER => INST_ID, > RESOLUTION => RESOLUTION); 108c114,115 < AWR_INFO => AWR_INFO); --- > AWR_INFO => AWR_INFO, > RESOLUTION => RESOLUTION); 118c125,126 < AWR_INFO => AWR_INFO); --- > AWR_INFO => AWR_INFO, > RESOLUTION => RESOLUTION); 130c138,139 < AWR_INFO => AWR_INFO); --- > AWR_INFO => AWR_INFO, > RESOLUTION => RESOLUTION); 183a193,194 > > 196a208 > RESOLUTION IN VARCHAR2 := NULL, 215c227,228 < MINIMIZE_COST => MINIMIZE_COST); --- > MINIMIZE_COST => MINIMIZE_COST, > RESOLUTION => RESOLUTION); 227c240,241 < MINIMIZE_COST => MINIMIZE_COST); --- > MINIMIZE_COST => MINIMIZE_COST, > RESOLUTION => RESOLUTION); 241c255,256 < MINIMIZE_COST => MINIMIZE_COST); --- > MINIMIZE_COST => MINIMIZE_COST, > RESOLUTION => RESOLUTION);
1186,1187c1186,1187
< ADW_RMMETRICS_COMMON CONSTANT VARCHAR2(32767) := q'[
< with rmmetrics_data as (-- ADW workload main query
---
> RMMETRICS_COMMON CONSTANT VARCHAR2(32767) := q'[
> with rmmetrics_data as (-- autonomous DB workload main query
1200a1201,1202
> cpu_usage_per_sec,
> avg_running_stmts,
1207c1209,1211
< avg_cpu_utilization,
---
> avg_cpu_utilization,
> cpu_usage_per_sec,
> avg_running_stmts,
1219,1221c1223,1225
< where avg_cpu_utilization +
< avg_active_parallel_stmts +
< avg_queued_parallel_stmts > 0)
---
> where avg_cpu_utilization + cpu_usage_per_sec +
> avg_running_stmts +
> avg_active_parallel_stmts + avg_queued_parallel_stmts > 0)
1247a1252,1253
> round(cpu_usage_per_sec, 2) as "cpuUsage",
> round(avg_running_stmts, 2) as "rst",
1260a1267,1268
> cpu_usage_per_sec,
> avg_running_stmts,
1422a1431
>
1430a1440
>
18245a18256
>
18266,18271c18277,18291
< FUNCTION REPORT_ADW_WORKLOAD_REALTIME(
< START_TIME IN DATE DEFAULT NULL,
< END_TIME IN DATE DEFAULT NULL,
< INST_ID_LOW IN NUMBER DEFAULT NULL,
< INST_ID_HIGH IN NUMBER DEFAULT NULL,
< SHOW_SQL IN NUMBER DEFAULT 0)
---
>
>
>
>
>
>
> FUNCTION GET_RMMETRICS_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME IN DATE DEFAULT NULL,
> END_TIME IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT 0)
18274,18276d18293
<
< L_ELAPSED NUMBER;
< L_CPU NUMBER;
18279c18296,18297
< L_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC;
---
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
18282,18283c18300
< L_ORIG_ENV DBMS_REPORT.FORMAT_PARAM_VALUES;
< L_SET_ENV BOOLEAN;
---
> L_RESULT_XML XMLTYPE := NULL;
18286,18287c18303,18310
< L_QUERY VARCHAR2(32767) := NULL;
< L_REPORT_SQL CLOB;
---
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME DATE := START_TIME;
> L_END_TIME DATE := END_TIME;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(10) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
18290,18292c18313
< L_REPORT_XML XMLTYPE := NULL;
< L_RMMETRICS_XML XMLTYPE := NULL;
<
---
> L_BUCKET_MAP PRVT_AWRV_MAPTAB;
18295,18298c18316,18317
< L_START_TIME DATE := START_TIME;
< L_END_TIME DATE := END_TIME;
< L_INST_ID_LOW NUMBER := INST_ID_LOW;
< L_INST_ID_HIGH NUMBER := INST_ID_HIGH;
---
> L_CON_ID NUMBER;
> L_CON_DBID NUMBER;
18301,18302c18320,18323
< L_BUCKET_COUNT NUMBER;
< L_BUCKET_INTERVAL NUMBER;
---
> L_RESOURCE_MANAGER_ENABLED NUMBER := 0;
>
>
> L_NUM_CPUS NUMBER := NULL;
18307c18328,18329
< ADW_RMMETRICS_REALTIME CONSTANT VARCHAR2(32767) := q'[
---
>
> RMMETRICS_RT CONSTANT VARCHAR2(32767) := q'[
18310c18332,18337
< avg(avg_cpu_utilization) avg_cpu_utilization,
---
> case
> when avg(avg_cpu_utilization) > 100 then 100
> else avg(avg_cpu_utilization)
> end avg_cpu_utilization,
> avg(cpu_usage_per_sec) cpu_usage_per_sec,
> sum(avg_running_stmts) avg_running_stmts,
18340,18346c18367,18397
< case
< when running_sessions_limit is null or
< running_sessions_limit = 0 then
< avg_cpu_utilization
< else
< (avg_running_sessions/running_sessions_limit)*100
< end avg_cpu_utilization,
---
> (case
> -- resource manager enabled, use running_sessions_limit
> when :resource_manager_enabled > 0 then
> (case
> -- if running_sessions_limit is not set
> when running_sessions_limit is null or
> running_sessions_limit = 0 then
> avg_cpu_utilization
> else
> (avg_running_sessions/running_sessions_limit)*100
> end)
> -- resource manager disabled, use system cpu limit
> else
> (case
> when :num_cpus > 0 then
> (avg_running_sessions/:num_cpus)*100
> -- system cpu limit not available
> -- use running_sessions_limit
> else
> (case
> when running_sessions_limit is null or
> running_sessions_limit = 0 then
> avg_cpu_utilization
> else
> (avg_running_sessions/running_sessions_limit)*100
> end)
> end)
> end) avg_cpu_utilization,
> cpu_consumed_time/(intsize_csec*10) cpu_usage_per_sec,
> avg_running_sessions + avg_waiting_sessions
> as avg_running_stmts,
18349,18353c18400,18402
< from v$rsrcmgrmetric_history
< where end_time >= to_date(:b_start_time,:date_fmt)
< and end_time < to_date(:b_end_time,:date_fmt)
< and userenv('INSTANCE') between :p_inst_id_low
< and :p_inst_id_high)))
---
> from sys.v_$rsrcmgrmetric_history
> where end_time >= to_date(:b_start_time, :date_fmt)
> and end_time < to_date(:b_end_time, :date_fmt))))
18356,18357c18405,18549
<
< ADW_RMMETRICS_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
---
>
> RMMETRICS_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var is_awr number;
> var p_contTab prvt_awrv_instTab;
> var b_start_time varchar2(4000);
> var b_end_time varchar2(4000);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_min_time varchar2(4000);
> var b_max_time varchar2(4000);
> var b_duration number;
> var date_fmt varchar2(4000);
> var resource_manager_enabled number;
> var num_cpus number;
> begin
> :is_awr := #is_awr#;
> :p_contTab := #p_contTab#;
> :b_start_time := '#b_start_time#';
> :b_end_time := '#b_end_time#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_min_time := '#b_min_time#';
> :b_max_time := '#b_max_time#';
> :b_duration := #b_duration#;
> :date_fmt := '#date_fmt#';
> :resource_manager_enabled := #resource_manager_enabled#;
> :num_cpus := #num_cpus#;
> end;
> /]';
>
>
> RMMETRICS_AWR CONSTANT VARCHAR2(32767) := q'[
> select bucket_id,
> consumer_group_id,
> consumer_group_name,
> case
> when sum(avg_cpu_utilization) > 100 then 100
> else sum(avg_cpu_utilization)
> end avg_cpu_utilization,
> sum(cpu_usage_per_sec) cpu_usage_per_sec,
> sum(avg_running_stmts) avg_running_stmts,
> sum(avg_active_parallel_stmts) avg_active_parallel_stmts,
> sum(avg_queued_parallel_stmts) avg_queued_parallel_stmts
> from (
> select bucket_id,
> consumer_group_name,
> consumer_group_id,
> -- avg
> avg(avg_cpu_utilization) avg_cpu_utilization,
> avg(cpu_usage_per_sec) cpu_usage_per_sec,
> avg(avg_running_stmts) avg_running_stmts,
> avg(avg_active_parallel_stmts)
> avg_active_parallel_stmts,
> avg(avg_queued_parallel_stmts)
> avg_queued_parallel_stmts
> from table(cast(:bucket_map as sys.prvt_awrv_mapTab)) b,
> (select /*+ no_merge */ nvl(m.snap_id, c.snap_id) as snap_id,
> nvl(m.instance_number, c.instance_number)
> as instance_number,
> m.consumer_group_id consumer_group_id,
> null consumer_group_name,
> case
> when c.cpu_limit is null or
> c.cpu_limit = 0 then
> m.avg_cpu_utilization
> else
> (m.avg_running_sessions/c.cpu_limit)*100
> end as avg_cpu_utilization,
> m.cpu_consumed_time/(m.intsize_csec*10) cpu_usage_per_sec,
> m.avg_running_sessions + m.avg_waiting_sessions
> as avg_running_stmts,
> m.avg_active_parallel_stmts as avg_active_parallel_stmts,
> m.avg_queued_parallel_stmts as avg_queued_parallel_stmts
> from awr_root_rsrc_metric m,
> (SELECT /*+ no_merge */
> nvl(s.snap_id, p.snap_id) as snap_id,
> nvl(s.instance_number, p.instance_number)
> as instance_number,
> CASE WHEN p.cpu_count IS NULL
> THEN nvl(s.num_cpus, s.num_cpu_cores)
> ELSE LEAST(p.cpu_count,
> NVL(s.num_cpus, s.num_cpu_cores))
> END as cpu_limit
> FROM
> (SELECT /*+ NO_MERGE */ snap_id, instance_number,
> MAX(num_cpus) num_cpus,
> MAX(num_cpu_cores) num_cpu_cores
> FROM
> (SELECT snap_id, instance_number,
> CASE
> WHEN stat_name = 'NUM_CPUS'
> THEN value
> ELSE NULL
> END as num_cpus,
> CASE
> WHEN stat_name = 'NUM_CPU_CORES'
> THEN value
> ELSE NULL
> END as num_cpu_cores
> FROM awr_root_osstat
> WHERE stat_name IN
> ('NUM_CPUS','NUM_CPU_CORES'))
> GROUP BY snap_id, instance_number) s,
> (SELECT /*+ NO_MERGE */ snap_id, instance_number,
> MAX(
> CASE
> WHEN resource_plan IS NULL THEN NULL
> ELSE TO_NUMBER(cpu_count)
> END) as cpu_count
> FROM
> (SELECT snap_id, instance_number,
> CASE
> WHEN parameter_name = 'cpu_count'
> THEN value
> ELSE NULL
> END cpu_count,
> CASE
> WHEN parameter_name =
> 'resource_manager_plan'
> THEN value
> ELSE NULL
> END resource_plan
> FROM awr_root_parameter
> WHERE parameter_name IN
> ('cpu_count', 'resource_manager_plan'))
> GROUP BY snap_id, instance_number) p
> WHERE s.snap_id = p.snap_id
> AND s.instance_number = p.instance_number) c
> where m.dbid = :m_dbid
> and m.snap_id between :m_begin_snap and :m_end_snap
> and m.con_dbid = :l_con_dbid
> and m.snap_id = c.snap_id(+)
> and m.instance_number = c.instance_number(+)) y
> where b.snap_id = y.snap_id
> and b.instance_number = y.instance_number
> group by bucket_id,
> y.instance_number,
> y.consumer_group_id,
> y.consumer_group_name)
> group by bucket_id,
> consumer_group_id,
> consumer_group_name]';
>
>
> RMMETRICS_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
18360,18361c18552,18556
< var b_start_time varchar2(4000);
< var b_end_time varchar2(4000);
---
> var bucket_map prvt_awrv_mapTab;
> var m_dbid number;
> var m_begin_snap number;
> var m_end_snap number;
> var l_con_dbid number;
18364,18365d18558
< var p_inst_id_low number;
< var p_inst_id_high number;
18369d18561
< var date_fmt varchar2(4000);
18373,18374c18565,18569
< :b_start_time := '#b_start_time#';
< :b_end_time := '#b_end_time#';
---
> :bucket_map := #bucket_map#;
> :m_dbid := #m_dbid#;
> :m_begin_snap := #m_begin_snap#;
> :m_end_snap := #m_end_snap#;
> :l_con_dbid := #l_con_dbid#;
18377,18378d18571
< :p_inst_id_low := #p_inst_id_low#;
< :p_inst_id_high := #p_inst_id_high#;
18382d18574
< :date_fmt := '#date_fmt#';
18387,18390d18578
<
<
< L_ORIG_ENV := DBMS_REPORT.FORMAT_PARAM_VALUES();
< L_SET_ENV := DBMS_REPORT.SETUP_REPORT_ENV(L_ORIG_ENV);
18393c18581,18583
< DBMS_REPORT.GET_TIMING_INFO(0, L_ELAPSED, L_CPU);
---
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
18396c18586
<
---
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
18398,18421d18587
< IF (START_TIME IS NOT NULL) THEN
< L_REF_PARAMS('start_time') :=
< TO_CHAR(START_TIME,DBMS_REPORT.DATE_FMT_MOD);
< END IF;
<
< IF (END_TIME IS NOT NULL) THEN
< L_REF_PARAMS('end_time') :=
< TO_CHAR(END_TIME,DBMS_REPORT.DATE_FMT_MOD);
< END IF;
<
< IF (INST_ID_LOW IS NOT NULL) THEN
< L_REF_PARAMS('inst_id_low') := TO_CHAR(INST_ID_LOW);
< END IF;
<
< IF (INST_ID_HIGH IS NOT NULL) THEN
< L_REF_PARAMS('inst_id_high') := TO_CHAR(INST_ID_HIGH);
< END IF;
<
< L_REF_PARAMS('is_realtime') := 1;
<
< IF (SHOW_SQL IS NOT NULL) THEN
< L_REF_PARAMS('show_sql') := SHOW_SQL;
< END IF;
<
18423,18428c18589,18590
< IF (L_INST_ID_LOW IS NULL) THEN
< L_INST_ID_LOW := 0;
< END IF;
<
< IF (L_INST_ID_HIGH IS NULL) THEN
< L_INST_ID_HIGH := INST_ID_MAX;
---
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
18438c18600,18606
< L_START_TIME := L_END_TIME - 1/24;
---
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME := L_END_TIME - 1/24;
>
> ELSE
> L_START_TIME := L_END_TIME - 1;
> END IF;
18442,18444c18610,18612
< CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
< (L_END_TIME - L_START_TIME)*DTOS,
< NULL);
---
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
18447,18456c18615
< L_QUERY := ADW_RMMETRICS_COMMON;
<
<
< L_QUERY := REPLACE(L_QUERY,'#GENERATE_BUCKETS_TAG#', GENERATE_BUCKETS_TAG2);
< L_QUERY := REPLACE(L_QUERY,'#GENERATE_BUCKETID_TAG#',
< GENERATE_BUCKETID_TAG);
< L_QUERY := REPLACE(L_QUERY,'#GENERATE_METRICS_BUCKETID#',
< ADW_RMMETRICS_REALTIME);
<
< IF (SHOW_SQL = 1) THEN
---
> IF (IS_REALTIME = 1) THEN
18458,18459d18616
< L_REPORT_SQL := ADW_RMMETRICS_RT_HEADER;
<
18461c18618,18627
< L_REPORT_SQL := L_REPORT_SQL || L_QUERY;
---
> BEGIN
> SELECT COUNT(VALUE)
> INTO L_RESOURCE_MANAGER_ENABLED
> FROM SYS.V_$SYSTEM_PARAMETER2
> WHERE NAME = 'resource_manager_plan'
> AND (VALUE IS NOT NULL AND VALUE != '');
> EXCEPTION
> WHEN OTHERS THEN
> L_RESOURCE_MANAGER_ENABLED := 0;
> END;
18464,18483c18630,18650
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#is_awr#', 0);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_contTab#', 'null');
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_start_time#',
< TO_CHAR(L_START_TIME, DATE_FMT));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_end_time#',
< TO_CHAR(L_END_TIME, DATE_FMT));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_bucket_interval#',
< L_BUCKET_INTERVAL);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_inst_id_low#', L_INST_ID_LOW);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_inst_id_high#', L_INST_ID_HIGH);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_min_time#',
< TO_CHAR(L_START_TIME, DATE_FMT));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_max_time#',
< TO_CHAR(L_END_TIME, DATE_FMT));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_duration#',
< ROUND((L_END_TIME - L_START_TIME)*DTOS));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#date_fmt#', DATE_FMT);
<
< L_RMMETRICS_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_REPORT_SQL);
---
> BEGIN
> SELECT SUM(NUM_CPUS)
> INTO L_NUM_CPUS
> FROM (
> SELECT HOST_NAME, SUM(NUM_CPUS) AS NUM_CPUS
> FROM TABLE(GV$(CURSOR(
> SELECT I.INSTANCE_NUMBER AS INST_ID, I.HOST_NAME,
> NVL(OS.NUM_CPUS, OS.NUM_CPU_CORES) AS NUM_CPUS
> FROM SYS.V$INSTANCE I,
> (SELECT MAX(DECODE(STAT_NAME, 'NUM_CPUS',
> VALUE, NULL)) AS NUM_CPUS,
> MAX(DECODE(STAT_NAME, 'NUM_CPU_CORES',
> VALUE, NULL)) AS NUM_CPU_CORES
> FROM SYS.V$OSSTAT
> WHERE STAT_NAME IN ('NUM_CPUS', 'NUM_CPU_CORES')
> ) OS)))
> GROUP BY HOST_NAME);
> EXCEPTION
> WHEN OTHERS THEN
> L_NUM_CPUS := 0;
> END;
18485d18651
< ELSE
18487,18502c18653,18661
< EXECUTE IMMEDIATE L_QUERY
< INTO L_RMMETRICS_XML
< USING 0, L_CG_MAP,
< TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
< TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
< TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
< TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
< L_BUCKET_INTERVAL,
< TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
< TO_CHAR(L_END_TIME, DATE_FMT), DATE_FMT,
< L_INST_ID_LOW, L_INST_ID_HIGH,
<
< L_BUCKET_INTERVAL, L_BUCKET_COUNT,
< TO_CHAR(L_START_TIME,DATE_FMT), TO_CHAR(L_END_TIME,DATE_FMT),
< (L_END_TIME - L_START_TIME)*DTOS;
< END IF;
---
> L_QRY := RMMETRICS_COMMON;
>
>
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETS_TAG#',
> GENERATE_BUCKETS_TAG2);
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETID_TAG#',
> GENERATE_BUCKETID_TAG);
> L_QRY := REPLACE(L_QRY,'#GENERATE_METRICS_BUCKETID#',
> RMMETRICS_RT);
18504,18505c18663,18665
<
< DBMS_REPORT.GET_TIMING_INFO(1, L_ELAPSED, L_CPU);
---
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := RMMETRICS_RT_HEADER;
18507,18513c18667,18668
<
<
< L_REPORT_XML :=
< PRVT_REPORT_TAGS.BUILD_REPORT_TAG(
< DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT(
< 'awrv','topsql', L_REF_PARAMS),
< L_ELAPSED, L_CPU);
---
>
> L_SQL := L_SQL || L_QRY;
18515,18519c18670,18684
<
<
< IF (L_RMMETRICS_XML IS NOT NULL) THEN
< L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_RMMETRICS_XML);
< END IF;
---
>
> L_SQL := REPLACE(L_SQL, '#is_awr#', 0);
> L_SQL := REPLACE(L_SQL, '#p_contTab#', 'null');
> L_SQL := REPLACE(L_SQL, '#b_start_time#',
> TO_CHAR(L_START_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time#',
> TO_CHAR(L_END_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_min_time#', TO_CHAR(L_START_TIME,
> DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_max_time#', TO_CHAR(L_END_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND((L_END_TIME - L_START_TIME)*DTOS));
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
18521c18686,18711
< <<DONE>>
---
> L_SQL := REPLACE(L_SQL, '#resource_manager_enabled#',
> L_RESOURCE_MANAGER_ENABLED);
>
> L_SQL := REPLACE(L_SQL, '#num_cpus#', L_NUM_CPUS);
>
> L_RESULT_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_SQL);
>
> ELSE
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING 0, L_CG_MAP,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_RESOURCE_MANAGER_ENABLED,
> L_NUM_CPUS, L_NUM_CPUS,
> TO_CHAR(L_START_TIME, DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME, DATE_FMT), DATE_FMT,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME,DATE_FMT), TO_CHAR(L_END_TIME,DATE_FMT),
> (L_END_TIME - L_START_TIME)*DTOS;
> END IF;
18524,18531c18714,18792
< IF (L_REPORT_XML IS NULL) THEN
<
< L_REPORT_XML :=
< PRVT_REPORT_TAGS.BUILD_REPORT_TAG(
< DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT(
< 'awrv','topsql',L_REF_PARAMS),
< NULL, NULL);
< END IF;
---
> ELSE
>
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
> CREATE_BUCKET_SNAP_MAP(L_AWR_PERIOD, L_BUCKET_MAP,
> L_BUCKET_COUNT, L_BUCKET_INTERVAL);
>
> L_CON_ID := SYS_CONTEXT('USERENV','CON_ID');
>
> CREATE_CONSUMER_GROUP_MAP(L_CON_ID, L_AWR_PERIOD, L_CG_MAP);
>
>
> L_QRY := RMMETRICS_COMMON;
>
>
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETS_TAG#',
> GENERATE_BUCKETS_TAG2);
> L_QRY := REPLACE(L_QRY,'#GENERATE_BUCKETID_TAG#',
> GENERATE_BUCKETID_TAG);
> L_QRY := REPLACE(L_QRY,'#GENERATE_METRICS_BUCKETID#',
> RMMETRICS_AWR);
>
>
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := RMMETRICS_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#is_awr#', 1);
> L_SQL := REPLACE(L_SQL, '#p_contTab#', '');
> L_SQL := REPLACE(L_SQL, '#bucket_map#', '');
> L_SQL := REPLACE(L_SQL, '#m_dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#m_begin_snap#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#m_end_snap#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#l_con_dbid#', L_CON_DBID);
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_min_time#',
> TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_max_time#',
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_AWR_PERIOD.M_MAX_TIME,
> L_AWR_PERIOD.M_MIN_TIME)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING 1,
> L_CG_MAP,
> L_BUCKET_MAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_CON_DBID,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT),
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT),
> ROUND(
> INTERVAL_TO_SECOND(
> L_AWR_PERIOD.M_MAX_TIME, L_AWR_PERIOD.M_MIN_TIME));
> END IF;
> END IF;
18533,18535d18793
< IF (L_SET_ENV) THEN
<
< DBMS_REPORT.RESTORE_REPORT_ENV(L_ORIG_ENV);
18537,18539d18794
<
<
< RETURN L_REPORT_XML;
18541c18796
< END REPORT_ADW_WORKLOAD_REALTIME;
---
> RETURN L_RESULT_XML;
18542a18798
> END GET_RMMETRICS_XML;
18566,18571c18822,18834
< FUNCTION REPORT_ADW_WORKLOAD_HISTORICAL(
< START_TIME IN DATE DEFAULT NULL,
< END_TIME IN DATE DEFAULT NULL,
< DBID IN NUMBER DEFAULT NULL,
< INST_ID IN NUMBER DEFAULT NULL,
< SHOW_SQL IN NUMBER DEFAULT 0)
---
>
>
>
>
> FUNCTION GET_SQL_N_PARSE_TIME_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
18574,18576d18836
<
< L_ELAPSED NUMBER;
< L_CPU NUMBER;
18579c18839,18840
< L_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC;
---
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
18582,18583c18843
< L_ORIG_ENV DBMS_REPORT.FORMAT_PARAM_VALUES;
< L_SET_ENV BOOLEAN;
---
> L_RESULT_XML XMLTYPE := NULL;
18586,18587c18846,18853
< L_QUERY VARCHAR2(32767) := NULL;
< L_REPORT_SQL CLOB;
---
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
18590,18591c18856
< L_REPORT_XML XMLTYPE := NULL;
< L_RMMETRICS_XML XMLTYPE := NULL;
---
> L_CON_DBID NUMBER;
18592a18858,18921
>
> SQL_AND_PARSE_TIME_RT CONSTANT VARCHAR2(32767) := q'[
> with base_data as (
> SELECT bucket_id,
> SUM(parse_time_sec) / :p_bucket_interval AS parse_aas,
> SUM(sql_exec_time_sec) / :p_bucket_interval AS sql_exec_aas,
> SUM(plsql_exec_time_sec) / :p_bucket_interval AS plsql_exec_aas
> FROM TABLE(GV$(CURSOR(
> SELECT bucket_id,
> SUM(parse_time_usec) / 1000000 as parse_time_sec,
> SUM(sql_exec_time_usec) / 1000000 as sql_exec_time_sec,
> SUM(plsql_exec_time_usec) / 1000000
> as plsql_exec_time_sec
> FROM (
> SELECT TRUNC(((
> cast(sample_time_utc as date) -
> to_date(:b_start_time_utc, :date_fmt))
> * 86400 ) / :p_bucket_interval) + 1
> as bucket_id,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_parse = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as parse_time_usec,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_sql_execution = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as sql_exec_time_usec,
> CASE
> WHEN (session_type = 'FOREGROUND'
> AND in_plsql_execution = 'Y')
> THEN usecs_per_row
> ELSE 0
> END as plsql_exec_time_usec
> FROM sys.v_$active_session_history
> WHERE sample_time_utc > to_timestamp(
> :b_start_time_utc,
> :date_fmt)
> AND sample_time_utc <= to_timestamp(
> :b_end_time_utc,:date_fmt)
> )
> WHERE bucket_id > 0
> GROUP BY bucket_id
> )))
> GROUP BY bucket_id
> ORDER BY bucket_id)
> select xmlelement("stattype",
> xmlattributes('sql' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlforest(round(parse_aas, 2) as "parse_aas",
> round(sql_exec_aas, 2) as "sql_aas",
> round(plsql_exec_aas, 2) as "plsql_aas")))))
> from base_data
> where (parse_aas + sql_exec_aas + plsql_exec_aas) > 0]';
18595,18600c18924,18940
< L_START_TIME DATE := START_TIME;
< L_END_TIME DATE := END_TIME;
< L_DBID NUMBER := DBID;
< L_INST_ID NUMBER := INST_ID;
< L_CON_ID NUMBER;
< L_CON_DBID NUMBER;
---
> SQL_AND_PARSE_TIME_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
18603,18606c18943,19048
< L_BUCKET_CALC_INTERVAL NUMBER;
< L_BUCKET_CALC_MAX_COUNT NUMBER;
< L_BUCKET_MAP PRVT_AWRV_MAPTAB;
< L_AWR_PERIOD PRVT_AWRV_METADATA;
---
> SQL_AND_PARSE_TIME_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id, s.stat_name,
> s.value / 1000000 as value_secs
> FROM awr_root_con_sys_time_model s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.stat_name IN ('parse time elapsed',
> 'sql execute elapsed time',
> 'PL/SQL execution elapsed time')
> ),
> diff_stats AS
> (SELECT estat.instance_number, estat.snap_id, estat.stat_name,
> s.begin_time_utc, s.end_time_utc,
> GREATEST(estat.value_secs -
> (s.diff_logic * NVL(bstat.value_secs,0)),0) /
> ((s.end_time_utc - s.begin_time_utc)*86400)
> as value_per_sec
> FROM base_stats estat, snaps s, base_stats bstat
> WHERE estat.instance_number = s.instance_number
> AND estat.snap_id = s.snap_id
> AND estat.instance_number = bstat.instance_number(+)
> AND estat.snap_id-1 = bstat.snap_id(+)
> AND estat.stat_name = bstat.stat_name(+)
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> final_stats AS
> (SELECT bucket_id, stat_name,
> SUM(value_per_sec * bucket_ratio) as aas
> FROM (
> SELECT b.bucket_id, s.stat_name, s.value_per_sec,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM diff_stats s, buckets b
> WHERE s.value_per_sec > 0
> AND b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, stat_name
> ),
> pivoted_stats AS
> (SELECT * FROM final_stats
> PIVOT(SUM(aas) FOR stat_name IN
> ('parse time elapsed' as parse_aas,
> 'sql execute elapsed time' as sql_exec_aas,
> 'PL/SQL execution elapsed time' as plsql_exec_aas)
> )
> ),
> base_data AS
> (SELECT bucket_id, parse_aas, sql_exec_aas, plsql_exec_aas
> FROM pivoted_stats
> ORDER BY bucket_id)
> select xmlelement("stattype",
> xmlattributes('sql' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlforest(round(parse_aas, 2) as "parse_aas",
> round(sql_exec_aas, 2) as "sql_aas",
> round(plsql_exec_aas, 2) as "plsql_aas")))))
> from base_data
> where (parse_aas + sql_exec_aas + plsql_exec_aas) > 0]';
18609c19051,19060
< L_CG_MAP PRVT_AWRV_INSTTAB := NULL;
---
> SQL_AND_PARSE_TIME_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
18611c19062,19073
< L_CPU_COUNT NUMBER := NULL;
---
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
18612a19075
> BEGIN
18614,18615c19077,19079
< L_ERRMSG VARCHAR2(32767);
< L_ERROR_XML XMLTYPE := NULL;
---
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
18617,18668c19081,19775
< ADW_RMMETRICS_AWR CONSTANT VARCHAR2(32767) := q'[
< select bucket_id,
< consumer_group_id,
< consumer_group_name,
< sum(avg_cpu_utilization)
< avg_cpu_utilization,
< sum(avg_active_parallel_stmts)
< avg_active_parallel_stmts,
< sum(avg_queued_parallel_stmts)
< avg_queued_parallel_stmts
< from (
< select bucket_id,
< consumer_group_name,
< consumer_group_id,
< -- avg
< avg(avg_cpu_utilization)
< avg_cpu_utilization,
< avg(avg_active_parallel_stmts)
< avg_active_parallel_stmts,
< avg(avg_queued_parallel_stmts)
< avg_queued_parallel_stmts
< from table(
< cast(:bucket_map as
< sys.prvt_awrv_mapTab)) m,
< (select /*+ no_merge */ snap_id,
< instance_number,
< consumer_group_id,
< null consumer_group_name,
< case
< when :cpu_count is null or
< :cpu_count = 0 then
< avg_cpu_utilization
< else
< (avg_running_sessions/:cpu_count)*100
< end avg_cpu_utilization,
< avg_active_parallel_stmts,
< avg_queued_parallel_stmts
< from awr_pdb_rsrc_metric
< where dbid = :m_dbid
< and snap_id between :m_begin_snap
< and :m_end_snap
< and con_dbid = :l_con_dbid) y
< where m.snap_id = y.snap_id
< and m.instance_number = y.instance_number
< and y.snap_id > :m_begin_snap
< group by bucket_id,
< y.instance_number,
< y.consumer_group_id,
< y.consumer_group_name)
< group by bucket_id,
< consumer_group_id,
< consumer_group_name]';
---
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := SQL_AND_PARSE_TIME_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SQL_AND_PARSE_TIME_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('sql_and_parse_time', L_SQL);
>
> ELSE
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := SQL_AND_PARSE_TIME_AWR;
>
>
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SQL_AND_PARSE_TIME_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#', ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('sql_and_parse_time', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND(
> INTERVAL_TO_SECOND(L_END_TIME_UTC, L_START_TIME_UTC));
>
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SQL_N_PARSE_TIME_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_WAIT_TIME_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> WAIT_TIME_RT CONSTANT VARCHAR2(32767) := q'[
> WITH
> inst_data AS
> (SELECT inst_id, bucket_id, metric_name, value
> FROM TABLE(GV$(CURSOR(
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id, metric_name,
> SUM(value*bucket_ratio) as value
> FROM (
> SELECT USERENV('INSTANCE') as inst_id,
> buckets.bucket_id,
> met.metric_name,
> met.value,
> (LEAST(met.end_time_utc,
> buckets.end_time_utc) -
> GREATEST(met.begin_time_utc,
> buckets.begin_time_utc)) /
> (met.end_time_utc - met.begin_time_utc)
> as bucket_ratio
> FROM (
> SELECT /*+ no_merge */ USERENV('INSTANCE')
> as inst_id,
> m.begin_time-tz.time_zone
> as begin_time_utc,
> m.end_time-tz.time_zone
> as end_time_utc,
> CASE
> WHEN m.metric_name =
> 'Average Active Sessions'
> THEN 'DBTime'
> ELSE 'CPU'
> END as metric_name,
> CASE
> WHEN m.metric_name =
> 'CPU Usage Per Sec'
> THEN m.value*m.intsize_csec/10000
> ELSE m.value*m.intsize_csec/100
> END as value
> FROM sys.v_$con_sysmetric_history m,
> (SELECT ROUND(
> (cast(latest_sample_time
> as date) -
> cast(sys_extract_utc(
> systimestamp)
> as date))
> *900,0)/900 as time_zone
> FROM sys.v_$ash_info) tz
> WHERE m.group_id = 18
> AND m.metric_name IN
> ('Average Active Sessions',
> 'CPU Usage Per Sec')
> AND m.begin_time-tz.time_zone <
> to_date(:b_end_time_utc, :date_fmt)
> AND m.end_time-tz.time_zone >=
> to_date(:b_start_time_utc, :date_fmt)
> ) met,
> (
> SELECT /*+ no_merge */ level as bucket_id,
> to_date(:b_start_time_utc,:date_fmt) +
> ((level -1) * :p_bucket_interval
> / 86400) as begin_time_utc,
> to_date(:b_start_time_utc,:date_fmt) +
> (level * :p_bucket_interval / 86400)
> as end_time_utc
> FROM sys.v_$instance
> -- note: DUAL not allowed inside GV$
> CONNECT BY level <=
> (to_date(:b_end_time_utc,
> :date_fmt) -
> to_date(:b_start_time_utc,
> :date_fmt))
> * 86400 / :p_bucket_interval
> ) buckets
> WHERE buckets.begin_time_utc < met.end_time_utc
> AND buckets.end_time_utc > met.begin_time_utc
> )
> GROUP BY bucket_id, metric_name
> UNION ALL
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id,
> metric_name,
> SUM(value) as value
> FROM (
> SELECT TRUNC(((cast(sample_time_utc as date) -
> to_date(:b_start_time_utc,
> :date_fmt)) * 86400) /
> :p_bucket_interval) + 1 AS bucket_id,
> DECODE(session_state, 'WAITING', wait_class,
> 'ASH_CPU')
> AS metric_name,
> CASE
> WHEN session_type = 'FOREGROUND'
> THEN usecs_per_row/1000000
> ELSE 0
> END AS value
> FROM sys.v_$active_session_history
> WHERE sample_time_utc >=
> to_timestamp(:b_start_time_utc, :date_fmt)
> AND sample_time_utc <
> to_timestamp(:b_end_time_utc, :date_fmt)
> )
> WHERE bucket_id > 0
> GROUP BY bucket_id, metric_name
> )))),
> db_data AS
> (SELECT bucket_id, metric_name,
> SUM(value) as value
> FROM inst_data
> GROUP BY bucket_id, metric_name
> ),
> wait_for_cpu AS
> (SELECT bucket_id, 'wait for CPU' as metric_name,
> GREATEST(SUM(DECODE(metric_name, 'ASH_CPU', value,
> -value)), 0) AS value
> FROM db_data
> WHERE metric_name IN ('CPU', 'ASH_CPU')
> GROUP BY bucket_id
> ),
> final_data AS
> (SELECT bucket_id, metric_name,
> value / :p_bucket_interval AS value
> FROM db_data
> WHERE metric_name <> 'ASH_CPU'
> AND value > 0
> UNION ALL
> SELECT bucket_id, metric_name,
> value /:p_bucket_interval AS value
> FROM wait_for_cpu
> WHERE value > 0
> ),
> base_data AS
> (SELECT * FROM final_data
> ORDER BY bucket_id, metric_name)
> select xmlelement("stattype",
> xmlattributes('wait_time' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")
> ))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> WAIT_TIME_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
> WAIT_TIME_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT e.instance_number, e.snap_id, e.wait_class,
> SUM(e.time_waited_micro_fg)/1000000 as value
> FROM awr_root_con_system_event e
> WHERE e.dbid = :dbid
> AND e.snap_id >= :begin_snap_id
> AND e.snap_id <= :end_snap_id
> AND e.wait_class <> 'Idle'
> GROUP BY e.instance_number, e.snap_id, e.wait_class
> UNION ALL
> SELECT s.instance_number, s.snap_id,
> CASE
> WHEN s.stat_name = 'DB time'
> THEN 'DBTime'
> ELSE 'CPU'
> END as wait_class,
> s.value/1000000 as value
> FROM awr_root_con_sys_time_model s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.stat_name IN ('DB time', 'DB CPU')
> ),
> agg_stats AS
> (SELECT /*+ no_merge */ instance_number, snap_id, wait_class,
> SUM(value) as value
> FROM base_stats
> WHERE value > 0
> GROUP BY instance_number, snap_id, wait_class
> ),
> diff_stats AS
> (SELECT estat.instance_number, estat.snap_id, estat.wait_class,
> s.begin_time_utc, s.end_time_utc,
> GREATEST(estat.value -
> (s.diff_logic * NVL(bstat.value,0)),0) /
> ((s.end_time_utc - s.begin_time_utc)*86400)
> as value
> FROM agg_stats estat, snaps s, agg_stats bstat
> WHERE estat.instance_number = s.instance_number
> AND estat.snap_id = s.snap_id
> AND estat.instance_number = bstat.instance_number(+)
> AND estat.snap_id-1 = bstat.snap_id(+)
> AND estat.wait_class = bstat.wait_class(+)
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> db_stats AS
> (SELECT bucket_id, wait_class,
> SUM(value * bucket_ratio) as value
> FROM (
> SELECT b.bucket_id, s.wait_class, s.value,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM diff_stats s, buckets b
> WHERE b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, wait_class
> ),
> wait_for_cpu AS
> (SELECT bucket_id, 'wait for CPU' as wait_class,
> GREATEST(SUM(DECODE(wait_class, 'DBTime', value, -value)),
> 0) as value
> FROM db_stats
> GROUP BY bucket_id
> ),
> final_stats AS
> (SELECT bucket_id, wait_class, value
> FROM db_stats
> UNION ALL
> SELECT bucket_id, wait_class, value
> FROM wait_for_cpu
> ),
> base_data AS
> (SELECT bucket_id, wait_class, value
> FROM final_stats
> ORDER BY 1,2)
> select xmlelement("stattype",
> xmlattributes('wait_time' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("wait_class",
> xmlattributes(wait_class as "name",
> round(value, 2) as "value")))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> WAIT_TIME_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := WAIT_TIME_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := WAIT_TIME_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('wait_time', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := WAIT_TIME_AWR;
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := WAIT_TIME_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('wait_time', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT),
> TO_CHAR(L_END_TIME_UTC, DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
> END IF;
18669a19777,20464
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_WAIT_TIME_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SYSMETRICS_XML(
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME_UTC IN DATE DEFAULT NULL,
> END_TIME_UTC IN DATE DEFAULT NULL,
> BUCKET_COUNT IN NUMBER DEFAULT 128,
> BUCKET_INTERVAL IN NUMBER DEFAULT NULL,
> AWR_PERIOD IN PRVT_AWRV_METADATA DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME_UTC DATE := START_TIME_UTC;
> L_END_TIME_UTC DATE := END_TIME_UTC;
> L_BUCKET_COUNT NUMBER := BUCKET_COUNT;
> L_BUCKET_INTERVAL NUMBER := BUCKET_INTERVAL;
> L_AWR_PERIOD PRVT_AWRV_METADATA := AWR_PERIOD;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_CON_DBID NUMBER;
>
>
> SYSMETRIC_RT CONSTANT VARCHAR2(32767) := q'[
> WITH
> inst_data AS
> (SELECT inst_id, bucket_id, metric_name, value
> FROM TABLE(GV$(CURSOR(
> SELECT USERENV('INSTANCE') as inst_id,
> bucket_id, metric_name,
> SUM(value*bucket_ratio) as value
> FROM (
> SELECT USERENV('INSTANCE') as inst_id,
> buckets.bucket_id,
> met.metric_name,
> met.value,
> (LEAST(met.end_time_utc,
> buckets.end_time_utc) -
> GREATEST(met.begin_time_utc,
> buckets.begin_time_utc)) /
> (met.end_time_utc - met.begin_time_utc)
> as bucket_ratio
> FROM (
> SELECT /*+ no_merge */ USERENV('INSTANCE')
> as inst_id,
> m.begin_time-tz.time_zone
> as begin_time_utc,
> m.end_time-tz.time_zone
> as end_time_utc,
> m.metric_name,
> CASE
> WHEN m.metric_name =
> 'CPU Usage Per Sec'
> THEN m.value/100
> ELSE m.value
> END as value
> FROM sys.v_$con_sysmetric_history m,
> (SELECT ROUND(
> (cast(latest_sample_time
> as date) -
> cast(sys_extract_utc(
> systimestamp)
> as date))
> *900,0)/900 as time_zone
> FROM sys.v_$ash_info) tz
> WHERE m.group_id = 18
> AND m.metric_name IN
> ('Average Active Sessions',
> 'CPU Usage Per Sec',
> 'Executions Per Sec',
> 'User Calls Per Sec',
> 'Total Parse Count Per Sec',
> 'User Commits Per Sec',
> 'User Rollbacks Per Sec',
> 'Session Count',
> 'Current Logons Count',
> 'Logons Per Sec',
> 'Logons Per Txn',
> 'Redo Generated Per Sec',
> 'Redo Generated Per Txn',
> 'User Transaction Per Sec',
> 'Network Traffic Volume Per Sec',
> 'Hard Parse Count Per Sec',
> 'Parse Failure Count Per Sec',
> 'Current Open Cursors Count')
> AND m.begin_time-tz.time_zone <
> to_date(:b_end_time_utc, :date_fmt)
> AND m.end_time-tz.time_zone >=
> to_date(:b_start_time_utc, :date_fmt)
> ) met,
> (
> SELECT /*+ no_merge */ level as bucket_id,
> to_date(:b_start_time_utc,:date_fmt) +
> ((level -1) * :p_bucket_interval
> / 86400) as begin_time_utc,
> to_date(:b_start_time_utc,:date_fmt) +
> (level * :p_bucket_interval / 86400)
> as end_time_utc
> FROM sys.v_$instance
> -- note: DUAL not allowed inside GV$
> CONNECT BY level <=
> (to_date(:b_end_time_utc,
> :date_fmt) -
> to_date(:b_start_time_utc,
> :date_fmt))
> * 86400 / :p_bucket_interval
> ) buckets
> WHERE buckets.begin_time_utc < met.end_time_utc
> AND buckets.end_time_utc > met.begin_time_utc
> )
> GROUP BY bucket_id, metric_name)))),
> db_data AS
> (SELECT bucket_id, metric_name,
> SUM(value) as value
> FROM inst_data
> GROUP BY bucket_id, metric_name
> ),
> final_data AS
> (SELECT bucket_id, metric_name,
> value AS value
> FROM db_data
> WHERE value > 0
> ),
> base_data AS
> (SELECT * FROM final_data
> ORDER BY bucket_id, metric_name)
> select xmlelement("stattype",
> xmlattributes('sysmetric' as "name"),
> xmlelement("buckets",
> xmlattributes(:p_bucket_interval as "bucket_interval",
> :p_bucket_count as "bucket_count",
> :b_start_time_utc as "start_time_utc",
> :b_end_time_utc as "end_time_utc",
> :b_duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")
> ))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> SYSMETRIC_RT_HEADER CONSTANT VARCHAR2(32767) := q'[
> var date_fmt varchar2(32);
> var b_start_time_utc varchar2(32);
> var b_end_time_utc varchar2(32);
> var p_bucket_interval number;
> var p_bucket_count number;
> var b_duration number;
> begin
> :date_fmt := '#date_fmt#';
> :b_start_time_utc := '#b_start_time_utc#';
> :b_end_time_utc := '#b_end_time_utc#';
> :p_bucket_interval := #p_bucket_interval#;
> :p_bucket_count := #p_bucket_count#;
> :b_duration := #b_duration#;
> end;
> /]';
>
>
> SYSMETRIC_AWR CONSTANT VARCHAR2(32767) := q'[
> WITH
> snaps AS
> (SELECT /*+ no_merge */ s.instance_number, s.snap_id,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN CAST((p.open_time_tz at time zone 'UTC') AS DATE)
> ELSE CAST((s.begin_interval_time_tz at time zone 'UTC')
> AS DATE)
> END as begin_time_utc,
> CAST((s.end_interval_time_tz at time zone 'UTC') AS DATE)
> as end_time_utc,
> CASE
> WHEN p.open_time_tz > s.begin_interval_time_tz
> THEN 0
> ELSE 1
> END as diff_logic
> FROM awr_root_snapshot s, awr_root_pdb_in_snap p
> WHERE s.dbid = :dbid
> AND p.dbid = :dbid
> AND s.instance_number = p.instance_number
> AND s.snap_id = p.snap_id
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND p.snap_id >= :begin_snap_id
> AND p.snap_id <= :end_snap_id
> ),
> base_stats AS
> (SELECT s.instance_number, s.snap_id,
> s.metric_name,
> CASE
> WHEN s.metric_name =
> 'CPU Usage Per Sec'
> THEN s.average/100
> ELSE s.average
> END as value
> FROM awr_root_con_sysmetric_summ s
> WHERE s.dbid = :dbid
> AND s.snap_id >= :begin_snap_id
> AND s.snap_id <= :end_snap_id
> AND s.metric_name IN ('Average Active Sessions',
> 'CPU Usage Per Sec',
> 'Executions Per Sec',
> 'User Calls Per Sec',
> 'Total Parse Count Per Sec',
> 'User Commits Per Sec',
> 'User Rollbacks Per Sec',
> 'Session Count',
> 'Current Logons Count',
> 'Logons Per Sec',
> 'Logons Per Txn',
> 'Redo Generated Per Sec',
> 'Redo Generated Per Txn',
> 'User Transaction Per Sec',
> 'Network Traffic Volume Per Sec',
> 'Hard Parse Count Per Sec',
> 'Parse Failure Count Per Sec',
> 'Current Open Cursors Count')
> ),
> agg_stats AS
> (SELECT /*+ no_merge */ instance_number, snap_id, metric_name,
> SUM(value) as value
> FROM base_stats
> WHERE value > 0
> GROUP BY instance_number, snap_id, metric_name
> ),
> snap_stats AS
> (SELECT a.instance_number, a.snap_id, a.metric_name, a.value,
> s.begin_time_utc, s.end_time_utc
> FROM agg_stats a, snaps s
> WHERE a.instance_number = s.instance_number
> AND a.snap_id = s.snap_id
> ),
> buckets AS
> (SELECT level as bucket_id,
> to_date(:begin_time_utc, :date_format) +
> ((level -1) * :bucket_interval_secs/86400) as begin_time_utc,
> to_date(:begin_time_utc, :date_format) +
> (level * :bucket_interval_secs/86400) as end_time_utc
> FROM sys.dual
> CONNECT BY level <= (to_date(:end_time_utc, :date_format) -
> to_date(:begin_time_utc, :date_format))
> * 86400 / :bucket_interval_secs
> ),
> db_stats AS
> (SELECT bucket_id, metric_name,
> SUM(value * bucket_ratio) as value
> FROM (
> SELECT b.bucket_id, s.metric_name, s.value,
> (LEAST(s.end_time_utc, b.end_time_utc) -
> GREATEST(s.begin_time_utc, b.begin_time_utc))
> / (b.end_time_utc - b.begin_time_utc) as bucket_ratio
> FROM snap_stats s, buckets b
> WHERE b.end_time_utc > b.begin_time_utc
> AND s.begin_time_utc < b.end_time_utc
> AND s.end_time_utc > b.begin_time_utc
> )
> GROUP BY bucket_id, metric_name
> ),
> base_data AS
> (SELECT bucket_id, metric_name, value
> FROM db_stats
> ORDER BY 1, 2)
> select xmlelement("stattype",
> xmlattributes('sysmetric' as "name"),
> xmlelement("buckets",
> xmlattributes(:bucket_interval_secs as "bucket_interval",
> :bucket_count as "bucket_count",
> :begin_time_utc as "start_time_utc",
> :end_time_utc as "end_time_utc",
> :duration as "duration"),
> xmlagg(xmlelement("bucket",
> xmlattributes(bucket_id as "bucket_id"),
> xmlagg(
> xmlelement("metric",
> xmlattributes(metric_name as "name",
> round(value, 2) as "value")))))))
> from base_data
> where value > 0
> group by bucket_id]';
>
> SYSMETRIC_AWR_HEADER CONSTANT VARCHAR2(32767) := q'[
> var dbid number;
> var begin_snap_id number;
> var end_snap_id number;
> var begin_time_utc varchar2(4000);
> var end_time_utc varchar2(4000);
> var date_format varchar2(32);
> var bucket_interval_secs number;
> var bucket_count number;
> var duration number;
>
> begin
> :dbid := #dbid#;
> :begin_snap_id := #begin_snap_id#;
> :end_snap_id := #end_snap_id#;
> :begin_time_utc := '#begin_time_utc#';
> :end_time_utc := '#end_time_utc#';
> :date_format := '#date_format#';
> :bucket_interval_secs := #bucket_interval_secs#;
> :bucket_count := #bucket_count#;
> :duration := #duration#;
> end;
> /]';
>
> BEGIN
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
>
>
> L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
>
> IF (DBID IS NULL) THEN
> L_DBID := L_CON_DBID;
> END IF;
>
>
> IF (END_TIME_UTC IS NULL) THEN
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE);
> END IF;
>
>
> IF (START_TIME_UTC IS NULL) THEN
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME_UTC := L_END_TIME_UTC - 1/24;
>
> ELSE
> L_START_TIME_UTC := L_END_TIME_UTC - 1;
> END IF;
> END IF;
>
>
> IF (BUCKET_COUNT IS NULL) THEN
> L_BUCKET_COUNT := 60;
> END IF;
>
>
> IF (IS_REALTIME = 1) THEN
>
> L_QRY := SYSMETRIC_RT;
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SYSMETRIC_RT_HEADER;
>
>
> L_SQL := REPLACE(L_SQL, '#date_fmt#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#b_start_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#b_end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#p_bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#p_bucket_interval#', L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#b_duration#',
> ROUND(L_END_TIME_UTC-L_START_TIME_UTC)*DTOS);
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('sysmetric', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC,DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
>
> L_BUCKET_INTERVAL, L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC,DATE_FMT),
> TO_CHAR(L_END_TIME_UTC,DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
>
> ELSE
> IF (L_AWR_PERIOD IS NOT NULL) THEN
>
>
> L_QRY := SYSMETRIC_AWR;
>
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_AWR_PERIOD.M_MIN_TIME);
>
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_QRY, L_AWR_VIEW_PREFIX);
> END IF;
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := SYSMETRIC_AWR_HEADER;
>
>
> L_SQL := L_SQL || L_QRY;
>
>
> L_SQL := REPLACE(L_SQL, '#dbid#', L_AWR_PERIOD.M_DBID);
> L_SQL := REPLACE(L_SQL, '#begin_snap_id#', L_AWR_PERIOD.M_BEGIN_SNAP);
> L_SQL := REPLACE(L_SQL, '#end_snap_id#', L_AWR_PERIOD.M_END_SNAP);
> L_SQL := REPLACE(L_SQL, '#begin_time_utc#',
> TO_CHAR(L_START_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#end_time_utc#',
> TO_CHAR(L_END_TIME_UTC, DATE_FMT));
> L_SQL := REPLACE(L_SQL, '#date_format#', DATE_FMT);
> L_SQL := REPLACE(L_SQL, '#bucket_count#', L_BUCKET_COUNT);
> L_SQL := REPLACE(L_SQL, '#bucket_interval_secs#',
> L_BUCKET_INTERVAL);
> L_SQL := REPLACE(L_SQL, '#duration#',
> ROUND(INTERVAL_TO_SECOND(
> L_END_TIME_UTC, L_START_TIME_UTC)));
>
> L_RESULT_XML := I_SHOW_SQL_XML('sysmetric', L_SQL);
>
> ELSE
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML
> USING L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> L_AWR_PERIOD.M_DBID,
> L_AWR_PERIOD.M_BEGIN_SNAP,
> L_AWR_PERIOD.M_END_SNAP,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> L_BUCKET_INTERVAL,
> L_BUCKET_INTERVAL,
> L_BUCKET_COUNT,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT),
> TO_CHAR(L_END_TIME_UTC, DATE_FMT),
> ROUND((L_END_TIME_UTC - L_START_TIME_UTC)*DTOS);
> END IF;
>
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SYSMETRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_STORAGE_METRICS_XML(
> SERVICE_TYPE IN VARCHAR2 DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
> L_QRY VARCHAR2(32767) := NULL;
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
>
>
> STORAGE_SERVERLESS CONSTANT VARCHAR2(32767) := q'[
> select xmlelement("stattype",
> xmlattributes(
> 'storage' as "name",
> max(c.max_size) as "total",
> max(c.total_size) as "used",
> decode(max(c.max_size), 0, 0,
> (max(c.total_size)/max(c.max_size))*100)
> as "utilization"))
> from sys.v_$containers c
> where c.con_id > 2
> and c.name <> 'PAASSEED']';
>
>
> STORAGE_DEDICATED CONSTANT VARCHAR2(32767) := q'[
> select xmlelement("stattype",
> xmlattributes(
> 'storage' as "name",
> max(c.max_size) as "total",
> max(c.total_size) as "used",
> decode(max(c.max_size), 0, 0,
> (max(c.total_size)/max(c.max_size))*100)
> as "utilization"),
> xmlelement("tablespaces",
> xmlagg(
> xmlelement("tbs",
> xmlattributes(
> m.tablespace_name as "name",
> t.contents as "type",
> ROUND((m.tablespace_size)*t.block_size, 3) total_space,
> ROUND((m.used_space)*t.block_size, 3) used_space,
> ROUND(m.used_percent, 2) used_pct)))))
> from cdb_tablespace_usage_metrics m,
> cdb_tablespaces t,
> sys.v_$containers c
> where t.tablespace_name = m.tablespace_name
> and c.con_id > 2
> and c.name <> 'PAASSEED'
> and m.con_id = c.con_id
> and t.con_id = m.con_id]';
>
> BEGIN
>
> IF (SERVICE_TYPE IN (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D)) THEN
> L_QRY := STORAGE_DEDICATED;
> ELSIF (SERVICE_TYPE IN (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S)) THEN
> L_QRY := STORAGE_SERVERLESS;
> ELSE
> L_QRY := STORAGE_DEDICATED;
> END IF;
>
>
> IF (SHOW_SQL = 1) THEN
>
>
> L_SQL := L_QRY;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('storage', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE L_QRY
> INTO L_RESULT_XML;
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_STORAGE_METRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION GET_SESSION_METRICS_XML(
> SHOW_SQL IN NUMBER DEFAULT NULL)
> RETURN XMLTYPE
> IS
>
>
> L_SQL CLOB;
>
>
> L_RESULT_XML XMLTYPE := NULL;
> L_FAILED_LOGONS_XML XMLTYPE := NULL;
>
>
> NUM_CONNECTIONS_RT CONSTANT VARCHAR2(32767) := q'[
> SELECT xmlelement("stattype",
> xmlattributes('session' as "name"),
> xmlelement("num_connections", count(*)))
> FROM sys.gv_$session s
> WHERE UPPER(s.service_name) not in
> (SELECT p.name FROM sys.v_$pdbs p WHERE p.con_id=s.con_id)
> AND UPPER(s.service_name) not in ('SYS$BACKGROUND','SYS$USERS')
> AND s.type='USER'
> AND s.sid not in
> (SELECT ps.sid FROM sys.gv_$px_session ps)]';
>
>
> NUM_FAILED_LOGONS_RT CONSTANT VARCHAR2(32767) := q'[
> SELECT xmlelement("failed_logons", count(*))
> FROM cdb_unified_audit_trail
> WHERE action_name = 'LOGON'
> AND return_code != 0]';
>
> BEGIN
>
>
> IF (SHOW_SQL = 1) THEN
>
> L_SQL := NUM_CONNECTIONS_RT || NUM_FAILED_LOGONS_RT;
>
>
> L_RESULT_XML := I_SHOW_SQL_XML('session', L_SQL);
>
> ELSE
>
>
> EXECUTE IMMEDIATE NUM_CONNECTIONS_RT
> INTO L_RESULT_XML;
>
> EXECUTE IMMEDIATE NUM_FAILED_LOGONS_RT
> INTO L_FAILED_LOGONS_XML;
>
> IF (L_FAILED_LOGONS_XML IS NOT NULL) THEN
> L_RESULT_XML := L_RESULT_XML.APPENDCHILDXML(XML_ROOT,
> L_FAILED_LOGONS_XML);
> END IF;
>
> END IF;
>
> RETURN L_RESULT_XML;
>
> END GET_SESSION_METRICS_XML;
>
>
>
>
>
>
>
>
>
>
>
18671,18700c20466,20643
< ADW_RMMETRICS_AWR_SQL_HEADER CONSTANT VARCHAR2(32767) := q'[
< var is_awr number;
< var p_contTab prvt_awrv_instTab;
< var bucket_map prvt_awrv_mapTab;
< var cpu_count number;
< var m_dbid number;
< var m_begin_snap number;
< var m_end_snap number;
< var l_con_dbid number;
< var p_bucket_interval number;
< var p_bucket_count number;
< var b_min_time varchar2(4000);
< var b_max_time varchar2(4000);
< var b_duration number;
< begin
< :is_awr := #is_awr#;
< :p_contTab := #p_contTab#;
< :bucket_map := #bucket_map#;
< :cpu_count := #cpu_count#;
< :m_dbid := #m_dbid#;
< :m_begin_snap := #m_begin_snap#;
< :m_end_snap := #m_end_snap#;
< :l_con_dbid := #l_con_dbid#;
< :p_bucket_interval := #p_bucket_interval#;
< :p_bucket_count := #p_bucket_count#;
< :b_min_time := '#b_min_time#';
< :b_max_time := '#b_max_time#';
< :b_duration := #b_duration#;
< end;
< /]';
---
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> FUNCTION REPORT_WORKLOAD(
> SERVICE_TYPE IN VARCHAR2 DEFAULT NULL,
> IS_REALTIME IN NUMBER DEFAULT 1,
> DBID IN NUMBER DEFAULT NULL,
> START_TIME IN DATE DEFAULT NULL,
> END_TIME IN DATE DEFAULT NULL,
> REPORT_LEVEL IN VARCHAR2 DEFAULT NULL,
> SHOW_SQL IN NUMBER DEFAULT 0)
> RETURN XMLTYPE
> IS
>
> L_ELAPSED NUMBER;
> L_CPU NUMBER;
>
>
> L_REF_PARAMS DBMS_REPORT.REF_STRING_IDSPEC;
>
>
> L_ORIG_ENV DBMS_REPORT.FORMAT_PARAM_VALUES;
> L_SET_ENV BOOLEAN;
>
>
> L_REPORT_XML XMLTYPE := NULL;
> L_RM_METRICS_XML XMLTYPE := NULL;
> L_SYS_METRICS_XML XMLTYPE := NULL;
> L_SQL_TIME_XML XMLTYPE := NULL;
> L_WAIT_TIME_XML XMLTYPE := NULL;
> L_STORAGE_METRICS_XML XMLTYPE := NULL;
> L_SESSION_METRICS_XML XMLTYPE := NULL;
>
>
> L_SERVICE_TYPE VARCHAR2(32767) := SERVICE_TYPE;
> L_IS_REALTIME NUMBER := IS_REALTIME;
> L_DBID NUMBER := DBID;
> L_START_TIME DATE := START_TIME;
> L_END_TIME DATE := END_TIME;
> L_REPORT_LEVEL VARCHAR2(32767) := REPORT_LEVEL;
> L_TZ VARCHAR2(10) := NULL;
> L_START_TIME_UTC DATE := NULL;
> L_END_TIME_UTC DATE := NULL;
> L_BEGIN_SNAP_ID NUMBER := NULL;
> L_END_SNAP_ID NUMBER := NULL;
>
>
> L_BUCKET_COUNT NUMBER;
> L_BUCKET_INTERVAL NUMBER;
>
>
> L_AWR_PERIOD PRVT_AWRV_METADATA;
>
> L_SNAP_QRY VARCHAR2(32767) := NULL;
> L_AWR_VIEW_PREFIX VARCHAR2(20) := DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT;
>
>
> L_ERRMSG VARCHAR2(32767);
> L_ERROR_XML XMLTYPE := NULL;
>
>
> L_RSRCMGR_DETAIL NUMBER;
> L_SYSMETRIC_DETAIL NUMBER;
> L_SQL_TIME_DETAIL NUMBER;
> L_WAIT_TIME_DETAIL NUMBER;
> L_STORAGE_DETAIL NUMBER;
> L_SESSION_DETAIL NUMBER;
>
>
>
>
> FUNCTION I_PARSE_REPORT_LEVEL(
> P_REPORT_LEVEL IN VARCHAR2,
> P_RSRCMGR_DETAIL OUT NUMBER,
> P_SYSMETRIC_DETAIL OUT NUMBER,
> P_SQL_TIME_DETAIL OUT NUMBER,
> P_WAIT_TIME_DETAIL OUT NUMBER,
> P_STORAGE_DETAIL OUT NUMBER,
> P_SESSION_DETAIL OUT NUMBER)
> RETURN BOOLEAN
> IS
> L_REPORT_LEVEL VARCHAR2(32767) :=
> REPLACE(LOWER(P_REPORT_LEVEL), ' ', NULL);
> L_POS NUMBER := 1;
> L_SETVAL NUMBER;
> BEGIN
>
> P_RSRCMGR_DETAIL := 1;
> P_SYSMETRIC_DETAIL := 1;
> P_SQL_TIME_DETAIL := 1;
> P_WAIT_TIME_DETAIL := 1;
> P_STORAGE_DETAIL := 1;
> P_SESSION_DETAIL := 1;
>
>
> IF (L_REPORT_LEVEL IS NULL) THEN
> RETURN TRUE;
> END IF;
>
>
> L_POS := 1;
>
>
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 3) = 'all') THEN
>
>
> L_POS := L_POS + 3;
>
> ELSIF (SUBSTR(L_REPORT_LEVEL, L_POS, 4) = 'none') THEN
> P_RSRCMGR_DETAIL := 0;
> P_SYSMETRIC_DETAIL := 0;
> P_SQL_TIME_DETAIL := 0;
> P_WAIT_TIME_DETAIL := 0;
> P_STORAGE_DETAIL := 0;
> P_SESSION_DETAIL := 0;
> L_POS := L_POS + 4;
> END IF;
>
>
> WHILE (L_POS < LENGTH(L_REPORT_LEVEL))
> LOOP
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 1) = '-') THEN
> L_SETVAL := 0;
> L_POS := L_POS + 1;
> ELSE
> L_SETVAL := 1;
> IF (SUBSTR(L_REPORT_LEVEL, L_POS, 1) = '+') THEN
> L_POS := L_POS + 1;
> END IF;
> END IF;
>
> CASE
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'rsrcmgr') THEN
> P_RSRCMGR_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 9) = 'sysmetric') THEN
> P_SYSMETRIC_DETAIL := L_SETVAL;
> L_POS := L_POS + 9;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 3) = 'sql') THEN
> P_SQL_TIME_DETAIL := L_SETVAL;
> L_POS := L_POS + 3;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 4) = 'wait') THEN
> P_WAIT_TIME_DETAIL := L_SETVAL;
> L_POS := L_POS + 4;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'storage') THEN
> P_STORAGE_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
>
> WHEN (SUBSTR(L_REPORT_LEVEL, L_POS, 7) = 'session') THEN
> P_SESSION_DETAIL := L_SETVAL;
> L_POS := L_POS + 7;
>
> ELSE
>
> RETURN FALSE;
> END CASE;
> END LOOP;
18701a20645,20648
>
> RETURN TRUE;
>
> END I_PARSE_REPORT_LEVEL;
18714a20662,20673
> IF (SERVICE_TYPE IS NOT NULL) THEN
> L_REF_PARAMS('service_type') := SERVICE_TYPE;
> END IF;
>
> IF (IS_REALTIME IS NOT NULL) THEN
> L_REF_PARAMS('is_realtime') := IS_REALTIME;
> END IF;
>
> IF (DBID IS NOT NULL) THEN
> L_REF_PARAMS('dbid') := DBID;
> END IF;
>
18725,18730c20684,20685
< IF (DBID IS NOT NULL) THEN
< L_REF_PARAMS('dbid') := TO_CHAR(DBID);
< END IF;
<
< IF (INST_ID IS NOT NULL) THEN
< L_REF_PARAMS('inst_id') := TO_CHAR(INST_ID);
---
> IF (REPORT_LEVEL IS NOT NULL) THEN
> L_REF_PARAMS('report_level') := REPORT_LEVEL;
18733,18734d20687
< L_REF_PARAMS('is_realtime') := 0;
<
18737a20691,20697
>
>
>
>
> IF (IS_REALTIME IS NULL) THEN
> L_IS_REALTIME := 1;
> END IF;
18739c20699,20702
< L_CON_DBID := SYS_CONTEXT('USERENV','CON_DBID');
---
>
> IF (DBID IS NULL) THEN
> L_DBID := SYS_CONTEXT('USERENV','CON_DBID');
> END IF;
18742,18743c20705,20706
< IF (L_DBID IS NULL) THEN
< L_DBID := L_CON_DBID;
---
> IF (REPORT_LEVEL IS NULL) THEN
> L_REPORT_LEVEL := 'all';
18753c20716,20722
< L_START_TIME := L_END_TIME - 1;
---
>
> IF (L_IS_REALTIME = 1) THEN
> L_START_TIME := L_END_TIME - 1/24;
>
> ELSE
> L_START_TIME := L_END_TIME - 1;
> END IF;
18757,18761c20726,20731
<
< L_AWR_PERIOD := PRVT_AWRV_METADATA(
< P_START_TIME => L_START_TIME,
< P_END_TIME => L_END_TIME,
< P_DBID => L_DBID);
---
> L_TZ := DBMS_SQLTUNE_UTIL2.GET_TZ_OFFSET();
> L_END_TIME_UTC := CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(
> TO_CHAR(L_END_TIME, 'yyyy-mm-dd hh24:mi:ss')
> || L_TZ,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE);
18763,18766d20732
<
< IF (L_AWR_PERIOD.M_BEGIN_SNAP IS NULL OR
< L_AWR_PERIOD.M_BEGIN_SNAP = L_AWR_PERIOD.M_END_SNAP)
< THEN
18768,18776c20734,20739
< L_ERRMSG := '[' || L_AWR_PERIOD.M_DBID || ']' ||
< '[' || L_AWR_PERIOD.M_INST_ID_LOW || '.' ||
< L_AWR_PERIOD.M_INST_ID_HIGH || ']' ||
< '[' || L_AWR_PERIOD.M_BEGIN_SNAP || '.' ||
< L_AWR_PERIOD.M_END_SNAP || ']' ||
< '[' || TO_CHAR(L_AWR_PERIOD.M_MIN_TIME,
< DBMS_REPORT.DATE_FMT) || '-' ||
< TO_CHAR(L_AWR_PERIOD.M_MAX_TIME,
< DBMS_REPORT.DATE_FMT) || ']';
---
>
> L_START_TIME_UTC := CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(
> TO_CHAR(L_START_TIME, 'yyyy-mm-dd hh24:mi:ss')
> || L_TZ,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE);
18777a20741,20746
>
> IF (L_IS_REALTIME = 1) THEN
> CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
> (L_END_TIME - L_START_TIME)*DTOS,
> G_METRIC_SOURCE_HISTORY);
> ELSE
18779c20748,20750
< L_AWR_PERIOD := NULL;
---
> CALCULATE_BUCKETS(L_BUCKET_COUNT, L_BUCKET_INTERVAL,
> (L_END_TIME - L_START_TIME)*DTOS,
> NULL);
18782,18785c20753,20760
< L_ERROR_XML := ERROR_XML('report_adw_workload_historical',
< -20800,
< 'Insufficient awr data',
< L_ERRMSG);
---
> L_SNAP_QRY := q'[
> SELECT MIN(snap_id)-1, MAX(snap_id)
> FROM awr_root_snapshot
> WHERE dbid = :l_dbid
> AND cast((end_interval_time_tz at time zone 'UTC') as DATE)
> > to_date(:l_start_time_utc, :date_fmt)
> AND cast((begin_interval_time_tz at time zone 'UTC') as DATE)
> < to_date(:l_end_time_utc, :date_fmt)]';
18787,18792c20762,20764
< ELSE
<
<
< L_BUCKET_CALC_MAX_COUNT := 128;
< CREATE_BUCKET_SNAP_MAP(L_AWR_PERIOD, L_BUCKET_MAP,
< L_BUCKET_CALC_MAX_COUNT, L_BUCKET_CALC_INTERVAL);
---
> IF (SYS_CONTEXT('USERENV','CON_ID') > 2) THEN
> L_AWR_VIEW_PREFIX :=
> DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(L_START_TIME);
18794c20766,20768
< L_CON_ID := SYS_CONTEXT('USERENV','CON_ID');
---
> DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX(L_SNAP_QRY,
> L_AWR_VIEW_PREFIX);
> END IF;
18796c20770,20772
< CREATE_CONSUMER_GROUP_MAP(L_CON_ID, L_AWR_PERIOD, L_CG_MAP);
---
> IF (L_AWR_VIEW_PREFIX = DBMS_SQLTUNE_UTIL1.AWR_VIEW_ROOT) THEN
> L_DBID := SYS_CONTEXT('USERENV','DBID');
> END IF;
18798d20773
<
18800,18803c20775,20779
< SELECT VALUE
< INTO L_CPU_COUNT
< FROM V$SYSTEM_PARAMETER2
< WHERE NAME = 'cpu_count';
---
> EXECUTE IMMEDIATE L_SNAP_QRY
> INTO L_BEGIN_SNAP_ID, L_END_SNAP_ID
> USING L_DBID,
> TO_CHAR(L_START_TIME_UTC, DATE_FMT), DATE_FMT,
> TO_CHAR(L_END_TIME_UTC, DATE_FMT), DATE_FMT;
18805,18806c20781,20783
< WHEN OTHERS THEN
< L_CPU_COUNT := NULL;
---
> WHEN NO_DATA_FOUND THEN
> L_BEGIN_SNAP_ID := NULL;
> L_END_SNAP_ID := NULL;
18810,18811d20786
< L_QUERY := ADW_RMMETRICS_COMMON;
<
18813,18818c20788,20795
< L_QUERY := REPLACE(L_QUERY,'#GENERATE_BUCKETS_TAG#',
< GENERATE_BUCKETS_TAG2);
< L_QUERY := REPLACE(L_QUERY,'#GENERATE_BUCKETID_TAG#',
< GENERATE_BUCKETID_TAG);
< L_QUERY := REPLACE(L_QUERY,'#GENERATE_METRICS_BUCKETID#',
< ADW_RMMETRICS_AWR);
---
> L_AWR_PERIOD := PRVT_AWRV_METADATA(P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME,
> P_DBID => L_DBID);
>
> L_AWR_PERIOD.M_BEGIN_SNAP := L_BEGIN_SNAP_ID;
> L_AWR_PERIOD.M_END_SNAP := L_END_SNAP_ID;
> L_AWR_PERIOD.M_MIN_TIME := L_START_TIME;
> L_AWR_PERIOD.M_MAX_TIME := L_END_TIME;
18820,18822c20797,20800
< IF (SHOW_SQL = 1) THEN
<
< L_REPORT_SQL := ADW_RMMETRICS_AWR_SQL_HEADER;
---
>
> IF (L_AWR_PERIOD.M_BEGIN_SNAP IS NULL OR
> L_AWR_PERIOD.M_BEGIN_SNAP = L_AWR_PERIOD.M_END_SNAP)
> THEN
18823a20802,20810
> L_ERRMSG := '[' || L_AWR_PERIOD.M_DBID || ']' ||
> '[' || L_AWR_PERIOD.M_INST_ID_LOW || '.' ||
> L_AWR_PERIOD.M_INST_ID_HIGH || ']' ||
> '[' || L_AWR_PERIOD.M_BEGIN_SNAP || '.' ||
> L_AWR_PERIOD.M_END_SNAP || ']' ||
> '[' || TO_CHAR(L_AWR_PERIOD.M_MIN_TIME,
> DBMS_REPORT.DATE_FMT) || '-' ||
> TO_CHAR(L_AWR_PERIOD.M_MAX_TIME,
> DBMS_REPORT.DATE_FMT) || ']';
18825c20812
< L_REPORT_SQL := L_REPORT_SQL || L_QUERY;
---
> L_AWR_PERIOD := NULL;
18828,18852c20815,20818
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#is_awr#', 1);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_contTab#', '');
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#bucket_map#', '');
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#cpu_count#', L_CPU_COUNT);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#m_dbid#', L_AWR_PERIOD.M_DBID);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#m_begin_snap#',
< L_AWR_PERIOD.M_BEGIN_SNAP);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#m_end_snap#',
< L_AWR_PERIOD.M_END_SNAP);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#l_con_dbid#', L_CON_DBID);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_bucket_count#',
< L_BUCKET_CALC_MAX_COUNT);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#p_bucket_interval#',
< L_BUCKET_CALC_INTERVAL);
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_min_time#',
< TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_max_time#',
< TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT));
< L_REPORT_SQL := REPLACE(L_REPORT_SQL, '#b_duration#',
< ROUND(INTERVAL_TO_SECOND(
< L_AWR_PERIOD.M_MAX_TIME,
< L_AWR_PERIOD.M_MIN_TIME)));
<
< L_RMMETRICS_XML := I_SHOW_SQL_XML('rsrcmgrmetric', L_REPORT_SQL);
<
---
> L_ERROR_XML := ERROR_XML('report_workload',
> -20800,
> 'Insufficient awr data',
> L_ERRMSG);
18855,18872c20821,20822
< EXECUTE IMMEDIATE L_QUERY
< INTO L_RMMETRICS_XML
< USING 1,
< L_CG_MAP,
< L_BUCKET_MAP,
< L_CPU_COUNT, L_CPU_COUNT, L_CPU_COUNT,
< L_AWR_PERIOD.M_DBID,
< L_AWR_PERIOD.M_BEGIN_SNAP,
< L_AWR_PERIOD.M_END_SNAP,
< L_CON_DBID,
< L_AWR_PERIOD.M_BEGIN_SNAP,
< L_BUCKET_CALC_INTERVAL,
< L_BUCKET_CALC_MAX_COUNT,
< TO_CHAR(L_AWR_PERIOD.M_MIN_TIME, DATE_FMT),
< TO_CHAR(L_AWR_PERIOD.M_MAX_TIME, DATE_FMT),
< ROUND(
< INTERVAL_TO_SECOND(
< L_AWR_PERIOD.M_MAX_TIME, L_AWR_PERIOD.M_MIN_TIME));
---
> L_ERRMSG := NULL;
> L_ERROR_XML := NULL;
18878a20829,20901
> IF (NOT I_PARSE_REPORT_LEVEL(L_REPORT_LEVEL, L_RSRCMGR_DETAIL,
> L_SYSMETRIC_DETAIL, L_SQL_TIME_DETAIL,
> L_WAIT_TIME_DETAIL, L_STORAGE_DETAIL,
> L_SESSION_DETAIL)) THEN
> SYS.DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR(SYS_ERR_PARAM, 'report_level');
> END IF;
>
>
> IF (L_RSRCMGR_DETAIL = 1) THEN
> L_RM_METRICS_XML := GET_RMMETRICS_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME,
> L_END_TIME,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_SYSMETRIC_DETAIL = 1) THEN
> L_SYS_METRICS_XML := GET_SYSMETRICS_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
>
>
>
>
> IF (L_SQL_TIME_DETAIL = 1) THEN
> L_SQL_TIME_XML := GET_SQL_N_PARSE_TIME_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_WAIT_TIME_DETAIL = 1) THEN
> L_WAIT_TIME_XML := GET_WAIT_TIME_XML(L_IS_REALTIME,
> L_DBID,
> L_START_TIME_UTC,
> L_END_TIME_UTC,
> L_BUCKET_COUNT,
> L_BUCKET_INTERVAL,
> L_AWR_PERIOD,
> SHOW_SQL);
> END IF;
>
>
> IF (L_STORAGE_DETAIL = 1) THEN
> L_STORAGE_METRICS_XML := GET_STORAGE_METRICS_XML(L_SERVICE_TYPE,
> SHOW_SQL);
> END IF;
>
>
>
>
> IF (L_SESSION_DETAIL = 1) THEN
> L_SESSION_METRICS_XML := GET_SESSION_METRICS_XML(SHOW_SQL);
> END IF;
>
>
18890,18891d20912
< IF (L_ERROR_XML IS NOT NULL) THEN
< L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_ERROR_XML);
18893,18897c20914,20937
< ELSE
<
< IF (L_RMMETRICS_XML IS NOT NULL) THEN
< L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_RMMETRICS_XML);
< END IF;
---
> IF (L_RM_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_RM_METRICS_XML);
> END IF;
>
> IF (L_SYS_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_SYS_METRICS_XML);
> END IF;
>
> IF (L_SQL_TIME_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_SQL_TIME_XML);
> END IF;
>
> IF (L_WAIT_TIME_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT, L_WAIT_TIME_XML);
> END IF;
>
> IF (L_STORAGE_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_STORAGE_METRICS_XML);
> END IF;
>
> IF (L_SESSION_METRICS_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_SESSION_METRICS_XML);
18900c20940,20943
< <<DONE>>
---
> IF (L_ERROR_XML IS NOT NULL) THEN
> L_REPORT_XML := L_REPORT_XML.APPENDCHILDXML(XML_ROOT,
> L_ERROR_XML);
> END IF;
18901a20945,20946
> <<DONE>>
>
18920c20965,20966
< END REPORT_ADW_WORKLOAD_HISTORICAL;
---
> END REPORT_WORKLOAD;
>
13a14 > cell_level_value number; 18a20 > cell_level_value := 0; 68c70 < -- all instances --- > -- all instances, excluding instances where base level mode is enabled 70,71c72,77 < 'select nvl(max(value),0) from gv$parameter where ' || < 'name = ''inmemory_size''' --- > 'select nvl(max(A.value),0) from ' || > '(select value, inst_id from gv$parameter where ' || > 'name=''inmemory_size'') A, ' || > '(select value, inst_id from gv$parameter where ' || > 'name=''inmemory_force'') B ' || > 'where A.inst_id = B.inst_id and upper(B.value) != ''BASE_LEVEL''' 73a80,84 > execute immediate > 'select count(*) from gv$parameter where ' || > 'upper(value) = ''CELLMEMORY_LEVEL''' > into cell_level_value; > 88c99,101 < to_char(num_tab_part_cc); --- > to_char(num_tab_part_cc) || > ', ' || 'CellMemory Level: ' || > to_char(cell_level_value); 89a103 > -- Do we want to report feature use for cell level 91,92c105,107 < AND (inmemory_size_value > 0)) < OR (num_tab_cc + num_tab_part_cc > 0)) --- > AND (inmemory_size_value > 0)) > OR (num_tab_cc + num_tab_part_cc > 0) > OR (cell_level_value > 0))
288,290c288,294 < IF (M_RESOLVED_DB_TYPE < IN (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, < DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP)) --- > > IF (M_RESOLVED_DB_TYPE IN > (DBMS_SQLTUNE_UTIL2.DB_TYPE_PDB, > DBMS_SQLTUNE_UTIL2.DB_TYPE_IMP) > AND > DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(P_START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) 432c436,438 < IF (SYS.DBMS_SQLTUNE_UTIL0.CDB_IS_PDB(L_CON_NAME, L_CON_ID)) THEN --- > IF (SYS.DBMS_SQLTUNE_UTIL0.CDB_IS_PDB(L_CON_NAME, L_CON_ID) AND > DBMS_SQLTUNE_UTIL2.CHOOSEAWRFORPDB(P_START_TIME) = > DBMS_SQLTUNE_UTIL1.AWR_VIEW_PDB) THEN
25a26 > L_RESOLUTION VARCHAR2(2000) := 'medium'; 86a88,91 > L_RESOLUTION := SYS.DBMS_REPORT.GET_PARAM(L_PARAMS,'resolution', > NULLABLE=>TRUE); > > 99a105 > RESOLUTION => L_RESOLUTION, 155a162,165 > > L_RESOLUTION := SYS.DBMS_REPORT.GET_PARAM(L_PARAMS,'resolution', > NULLABLE=>TRUE); > 168a179 > RESOLUTION => L_RESOLUTION,
63a64
> L_SERVICE_TYPE VARCHAR2(32);
534d534
<
550,551c550
< P_INST_ID := TO_NUMBER(
< DBMS_REPORT.GET_PARAM(PARAMS,'inst_id',NULLABLE=>TRUE));
---
> P_DBID := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'dbid',NULLABLE=>TRUE));
554c553,554
< P_DBID := TO_NUMBER(DBMS_REPORT.GET_PARAM(PARAMS,'dbid',NULLABLE=>TRUE));
---
> P_INST_ID := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(PARAMS,'inst_id',NULLABLE=>TRUE));
562,566d561
< P_INCLUDE_SQLS := TO_NUMBER(
< DBMS_REPORT.GET_PARAM(PARAMS,'include_sqls',
< NULLABLE=>TRUE));
<
<
569a565,566
> L_SERVICE_TYPE := DBMS_SQLTUNE_UTIL2.GET_CLOUD_SERVICE_TYPE();
>
572,588c569,588
< IF (DBMS_SQLTUNE_UTIL2.IS_ADW() AND SYS_CONTEXT('USERENV', 'CON_ID') > 2)
< THEN
< IF (P_IS_REALTIME = 0) THEN
< REPORT_XML := PRVT_AWR_VIEWER.REPORT_ADW_WORKLOAD_HISTORICAL(
< START_TIME => P_START_TIME,
< END_TIME => P_END_TIME,
< DBID => P_DBID,
< INST_ID => P_INST_ID,
< SHOW_SQL => P_SHOW_SQL);
< ELSE
< REPORT_XML := PRVT_AWR_VIEWER.REPORT_ADW_WORKLOAD_REALTIME(
< START_TIME => P_START_TIME,
< END_TIME => P_END_TIME,
< INST_ID_LOW => P_INST_ID,
< INST_ID_HIGH => P_INST_ID,
< SHOW_SQL => P_SHOW_SQL);
< END IF;
---
> IF (PRVT_EMX.IS_OMX() OR
> (L_SERVICE_TYPE IN
> (DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ADW_D,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_S,
> DBMS_SQLTUNE_UTIL2.CLOUD_SERVICE_TYPE_ATP_D)
> AND SYS_CONTEXT('USERENV', 'CON_ID') > 2)) THEN
>
>
> P_REPORT_LEVEL := DBMS_REPORT.GET_PARAM(PARAMS,'report_level',
> NULLABLE=>TRUE);
>
> REPORT_XML := PRVT_AWR_VIEWER.REPORT_WORKLOAD(
> SERVICE_TYPE => L_SERVICE_TYPE,
> IS_REALTIME => P_IS_REALTIME,
> START_TIME => P_START_TIME,
> END_TIME => P_END_TIME,
> DBID => P_DBID,
> REPORT_LEVEL => P_REPORT_LEVEL,
> SHOW_SQL => P_SHOW_SQL);
591a592
>
593,594c594,596
<
<
---
> P_INCLUDE_SQLS := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(PARAMS,'include_sqls',
> NULLABLE=>TRUE));
39a40 > P_IS_OMX NUMBER; 125a127,129 > P_IS_OMX := CASE WHEN SYS.PRVT_EMX.IS_OMX() THEN 1 ELSE 0 END; > > 140a145 > IS_OMX => P_IS_OMX,
148c148 < P_INST_ID=>V_INST_ID, --- > P_INST_ID=>V_INST_ID,
33c33 < , encryption_verifier --- > , r.encryption_verifier
1,5c1,43 < SELECT OBJECT_ID, OBJECT_TYPE#, OWNER, TABLE_NAME, COLUMN_NAME, < sys.dg$getDgQuoteName(OWNER, TABLE_NAME, COLUMN_NAME, < dbms_json.format_flat, dbms_json.pretty) < FROM INT$DBA_JSON_COLUMNS < WHERE sys.dg$hasDGIndex(OWNER, TABLE_NAME, COLUMN_NAME) > 0 --- > SELECT obj.obj# "OBJECT_ID", > obj.type# "OBJECT_TYPE#", > usr.name "OWNER", > obj.name "TABLE_NAME", > col.name "COLUMN_NAME", > sys.dg$getDgQuoteName(usr.name, obj.name, col.name, > dbms_json.format_flat, dbms_json.pretty) "DATAGUIDE" > FROM sys.cdef$ CDEF, > sys."_CURRENT_EDITION_OBJ" OBJ, > sys.col$ COL, > sys.ccol$ CCOL, > sys.user$ USR > WHERE cdef.type# = 1 > AND bitand(cdef.defer, 126976) > 0 > AND cdef.obj# = obj.obj# > AND cdef.con# = ccol.con# > AND ccol.obj# = obj.obj# > AND col.col# = ccol.col# > AND col.obj# = obj.obj# > AND usr.user# = obj.owner# > AND col.type# IN (1,9,23,112,113,114) /* show only supported column types */ > AND bitand(col.property, 32) = 0 /* not hidden column */ > AND bitand(obj.flags, 128) = 0 /* not in recycle bin */ > AND obj.type# = 2 /* only tables */ > AND sys.dg$hasDGIndex(obj.owner#, obj.obj#, col.name) > 0 > UNION ALL > SELECT obj.obj# "OBJECT_ID", > obj.type# "OBJECT_TYPE#", > usr.name "OWNER", > obj.name "TABLE_NAME", > col.name "COLUMN_NAME", > sys.dg$getDgQuoteName(usr.name, obj.name, col.name, > dbms_json.format_flat, dbms_json.pretty) "DATAGUIDE" > FROM sys."_CURRENT_EDITION_OBJ" OBJ, > sys.col$ COL, > sys.user$ USR > WHERE col.obj# = obj.obj# > AND usr.user# = obj.owner# > AND col.type# = 119 /* show only JSON type columns */ > AND bitand(col.property, 32) = 0 /* not hidden column */ > AND bitand(obj.flags, 128) = 0 /* not in recycle bin */ > AND obj.type# = 2 /* only tables */ > AND sys.dg$hasDGIndex(obj.owner#, obj.obj#, col.name) > 0
1,5c1,4 < SELECT OBJECT_ID, OBJECT_TYPE#, OWNER, TABLE_NAME, COLUMN_NAME, < JT.JPATH AS PATH, JT.JTYPE AS TYPE, JT.TLENGTH AS LENGTH < FROM INT$DBA_JSON_COLUMNS, < TABLE(SYS.dg$getFlatDg(OWNER, TABLE_NAME, COLUMN_NAME)) JT < WHERE SYS.dg$hasDGIndex(OWNER, TABLE_NAME, COLUMN_NAME) > 0 --- > SELECT dg.OBJECT_ID, dg.OBJECT_TYPE#, dg.OWNER, dg.TABLE_NAME, dg.COLUMN_NAME, > jt.JPATH AS PATH, jt.JTYPE AS TYPE, jt.TLENGTH AS LENGTH > FROM INT$DBA_JSON_DATAGUIDES dg, > TABLE(SYS.dg$getFlatDg(dg.dataguide)) JT




