scripts/collector/oracle/sql/extracts/statspack/awrsnapdetails.sql (57 lines of code) (raw):
--
-- Copyright 2024 Google LLC
--
-- Licensed under the Apache License, Version 2.0 (the "License").
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- https://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
COLUMN HOUR FORMAT A4
COLUMN MIN_BEGIN_INTERVAL_TIME FORMAT A30
COLUMN MAX_BEGIN_INTERVAL_TIME FORMAT A30
spool &outputdir/opdb__awrsnapdetails__&v_tag
prompt PKEY|DBID|INSTANCE_NUMBER|HOUR|MIN_SNAP_ID|MAX_SNAP_ID|MIN_BEGIN_INTERVAL_TIME|MAX_BEGIN_INTERVAL_TIME|CNT|SUM_SNAPS_DIFF_SECS|AVG_SNAPS_DIFF_SECS|MEDIAN_SNAPS_DIFF_SECS|MODE_SNAPS_DIFF_SECS|MIN_SNAPS_DIFF_SECS|MAX_SNAPS_DIFF_SECS|DMA_SOURCE_ID|DMA_MANUAL_ID
WITH vawrsnap as (
SELECT :v_pkey AS pkey,
dbid, instance_number, hour,
min(snap_id) min_snap_id, max(snap_id) max_snap_id,
TO_CHAR(min(snap_time), 'YYYY-MM-DD HH24:MI:SS') min_begin_interval_time,
TO_CHAR(max(snap_time), 'YYYY-MM-DD HH24:MI:SS') max_begin_interval_time,
count(1) cnt,ROUND(SUM(snaps_diff_secs),0) sum_snaps_diff_secs,
ROUND(avg(snaps_diff_secs),0) avg_snaps_diff_secs,
ROUND(median(snaps_diff_secs),0) median_snaps_diff_secs,
ROUND(STATS_MODE(snaps_diff_secs),0) mode_snaps_diff_secs,
ROUND(min(snaps_diff_secs),0) min_snaps_diff_secs,
ROUND(max(snaps_diff_secs),0) max_snaps_diff_secs
FROM (
SELECT snap_id,
dbid,
instance_number,
snap_time,
hour,
snaps_diff_secs
FROM (
SELECT
s.snap_id,
s.dbid,
s.instance_number,
s.snap_time,
TO_CHAR(s.snap_time,'hh24') hour,
NVL(DECODE(GREATEST(snap_time, NVL(LAG(snap_time)
over (
PARTITION BY s.dbid, s.instance_number
ORDER BY s.snap_id), SYSDATE)), snap_time, snap_time - LAG(snap_time)
over (
PARTITION BY s.dbid, s.instance_number
ORDER BY s.snap_id),
0), 0) * 60 * 60 * 24 AS snaps_diff_secs,
s.startup_time,
LAG(s.startup_time,1) OVER (partition by instance_number ORDER BY snap_time) as lag_startup_time
FROM STATS$SNAPSHOT s
WHERE s.snap_time BETWEEN '&&v_min_snaptime' AND '&&v_max_snaptime'
AND dbid = &&v_dbid
order by s.snap_id )
WHERE startup_time = lag_startup_time
)
GROUP BY :v_pkey, dbid, instance_number, hour)
SELECT pkey , dbid , instance_number , hour , min_snap_id , max_snap_id , min_begin_interval_time ,
max_begin_interval_time , cnt , sum_snaps_diff_secs , avg_snaps_diff_secs , median_snaps_diff_secs ,
mode_snaps_diff_secs , min_snaps_diff_secs , max_snaps_diff_secs,
:v_dma_source_id AS DMA_SOURCE_ID, :v_manual_unique_id AS DMA_MANUAL_ID
FROM vawrsnap;
spool off
COLUMN HOUR CLEAR
COLUMN MIN_BEGIN_INTERVAL_TIME CLEAR
COLUMN MAX_BEGIN_INTERVAL_TIME CLEAR