HANA Backups BackupRuns
HANA Backups BackupRuns
/*
[NAME]
- HANA_Backups_BackupRuns
[DESCRIPTION]
[SOURCE]
[VALID FOR]
- Revisions: all
- Statistics server type: all
[INVOLVED TABLES]
- M_BACKUP_CATALOG
- M_BACKUP_CATALOG_FILES
[INPUT PARAMETERS]
- BEGIN_TIME
Begin time
'2018/12/05 14:05:00' --> Set begin time to 5th of December 2018, 14:05
'C' --> Set begin time to current time
'C-S900' --> Set begin time to current time minus 900 seconds
'C-M15' --> Set begin time to current time minus 15 minutes
'C-H5' --> Set begin time to current time minus 5 hours
'C-D1' --> Set begin time to current time minus 1 day
'C-W4' --> Set begin time to current time minus 4 weeks
'E-S900' --> Set begin time to end time minus 900 seconds
'E-M15' --> Set begin time to end time minus 15 minutes
'E-H5' --> Set begin time to end time minus 5 hours
'E-D1' --> Set begin time to end time minus 1 day
'E-W4' --> Set begin time to end time minus 4 weeks
'MIN' --> Set begin time to minimum (1000/01/01 00:00:00)
- END_TIME
End time
'2018/12/08 14:05:00' --> Set end time to 8th of December 2018, 14:05
'C' --> Set end time to current time
'C-S900' --> Set end time to current time minus 900 seconds
'C-M15' --> Set end time to current time minus 15 minutes
'C-H5' --> Set end time to current time minus 5 hours
'C-D1' --> Set end time to current time minus 1 day
'C-W4' --> Set end time to current time minus 4 weeks
'B+S900' --> Set end time to begin time plus 900 seconds
'B+M15' --> Set end time to begin time plus 15 minutes
'B+H5' --> Set end time to begin time plus 5 hours
'B+D1' --> Set end time to begin time plus 1 day
'B+W4' --> Set end time to begin time plus 4 weeks
'MAX' --> Set end time to maximum (9999/12/31 23:59:59)
- TIMEZONE
- HOST
Host name
- SERVICE_NAME
Service name
- BACKUP_TYPE
Type of backup
- BACKUP_DATA_TYPE
- BACKUP_STATUS
Status of backup
- MESSAGE
Backup message
- AGGREGATE_BY
- AGGREGATION_TYPE
- TIME_AGGREGATE_BY
[OUTPUT PARAMETERS]
[EXAMPLE OUTPUT]
-----------------------------------------------------------------------------------
-----------------
|START_TIME |HOST |PORT |BACKUP_TYPE|STATUS|BACKUPS|AGG|RUNTIME_H|
BACKUP_SIZE_GB|MESSAGE|
-----------------------------------------------------------------------------------
-----------------
|2014/09/29 12:00|saphana0032|30001|log backup |any | 55|AVG| 0.00|
0.03|any |
|2014/09/29 12:00|saphana0032|30003|log backup |any | 4|AVG| 0.00|
0.43|any |
|2014/09/29 12:00|saphana0032|30005|log backup |any | 14|AVG| 0.00|
0.05|any |
|2014/09/29 12:00|saphana0032|30007|log backup |any | 1|AVG| 0.00|
0.00|any |
|2014/09/29 12:00|saphana0033|30003|log backup |any | 4|AVG| 0.01|
0.60|any |
|2014/09/29 12:00|saphana0034|30003|log backup |any | 4|AVG| 0.00|
0.60|any |
|2014/09/29 12:00|saphana0041|30003|log backup |any | 4|AVG| 0.00|
0.17|any |
|2014/09/29 12:00|saphana0042|30003|log backup |any | 4|AVG| 0.00|
0.12|any |
|2014/09/29 12:00|saphana0043|30003|log backup |any | 8|AVG| 0.00|
0.89|any |
|2014/09/29 12:00|saphana0044|30003|log backup |any | 4|AVG| 0.00|
0.15|any |
-----------------------------------------------------------------------------------
-----------------
*/
START_TIME,
HOST,
SERVICE_NAME,
LPAD(BACKUP_ID, 13) BACKUP_ID,
BACKUP_TYPE,
DATA_TYPE,
STATUS,
LPAD(BACKUPS, 7) BACKUPS,
LPAD(TO_DECIMAL(MAP(BACKUPS, 0, 0, NUM_LOG_FULL / BACKUPS * 100), 10, 2), 12)
FULL_LOG_PCT,
AGG,
IFNULL(LPAD(TO_DECIMAL(RUNTIME_H * 60, 10, 2), 11), '') RUNTIME_MIN,
LPAD(TO_DECIMAL(BACKUP_SIZE_MB, 10, 2), 14) BACKUP_SIZE_MB,
IFNULL(LPAD(TO_DECIMAL(MAP(RUNTIME_H, 0, 0, BACKUP_SIZE_MB / RUNTIME_H / 3600),
10, 2), 8), '') MB_PER_S,
LPAD(TO_DECIMAL(SECONDS_BETWEEN(MAX_START_TIME, CURRENT_TIMESTAMP) / 86400, 10,
2), 11) DAYS_PASSED,
MESSAGE
FROM
( SELECT
START_TIME,
HOST,
SERVICE_NAME,
BACKUP_ID,
BACKUP_TYPE,
BACKUP_DATA_TYPE DATA_TYPE,
STATUS,
NUM_BACKUP_RUNS BACKUPS,
NUM_LOG_FULL,
AGGREGATION_TYPE AGG,
CASE AGGREGATION_TYPE
WHEN 'SUM' THEN SUM_RUNTIME_H
WHEN 'AVG' THEN MAP(NUM_BACKUP_RUNS, 0, 0, SUM_RUNTIME_H / NUM_BACKUP_RUNS)
WHEN 'MAX' THEN MAX_RUNTIME_H
END RUNTIME_H,
CASE AGGREGATION_TYPE
WHEN 'SUM' THEN SUM_BACKUP_SIZE_MB
WHEN 'AVG' THEN MAP(NUM_BACKUP_RUNS, 0, 0, SUM_BACKUP_SIZE_MB /
NUM_BACKUP_RUNS)
WHEN 'MAX' THEN MAX_BACKUP_SIZE_MB
END BACKUP_SIZE_MB,
MAX_START_TIME,
MESSAGE
FROM
( SELECT
CASE
WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'TIME') != 0 THEN
CASE
WHEN BI.TIME_AGGREGATE_BY LIKE 'TS%' THEN
TO_VARCHAR(ADD_SECONDS(TO_TIMESTAMP('2014/01/01 00:00:00',
'YYYY/MM/DD HH24:MI:SS'), FLOOR(SECONDS_BETWEEN(TO_TIMESTAMP('2014/01/01 00:00:00',
'YYYY/MM/DD HH24:MI:SS'),
CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(B.SYS_START_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE B.SYS_START_TIME
END) / SUBSTR(BI.TIME_AGGREGATE_BY, 3)) * SUBSTR(BI.TIME_AGGREGATE_BY, 3)),
'YYYY/MM/DD HH24:MI:SS')
ELSE TO_VARCHAR(CASE BI.TIMEZONE WHEN 'UTC' THEN
ADD_SECONDS(B.SYS_START_TIME, SECONDS_BETWEEN(CURRENT_TIMESTAMP,
CURRENT_UTCTIMESTAMP)) ELSE B.SYS_START_TIME END, BI.TIME_AGGREGATE_BY)
END
ELSE 'any'
END START_TIME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'HOST')
!= 0 THEN BF.HOST ELSE MAP(BI.HOST, '%',
'any', BI.HOST) END HOST,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'SERVICE')
!= 0 THEN BF.SERVICE_TYPE_NAME ELSE MAP(BI.SERVICE_NAME,
'%', 'any', BI.SERVICE_NAME) END SERVICE_NAME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'BACKUP_ID')
!= 0 THEN TO_VARCHAR(B.BACKUP_ID) ELSE 'any'
END BACKUP_ID,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'BACKUP_TYPE')
!= 0 THEN B.ENTRY_TYPE_NAME ELSE MAP(BI.BACKUP_TYPE,
'%', 'any', BI.BACKUP_TYPE) END BACKUP_TYPE,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY,
'BACKUP_DATA_TYPE') != 0 THEN BF.SOURCE_TYPE_NAME ELSE
MAP(BI.BACKUP_DATA_TYPE, '%', 'any', BI.BACKUP_DATA_TYPE) END BACKUP_DATA_TYPE,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'STATE')
!= 0 THEN B.STATE_NAME ELSE
MAP(BI.BACKUP_STATUS, '%', 'any', BI.BACKUP_STATUS) END STATUS,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'MESSAGE')
!= 0 THEN CASE WHEN B.MESSAGE LIKE 'Not all data could be written%' THEN 'Not all
data could be written'
ELSE B.MESSAGE END ELSE MAP(BI.MESSAGE, '%', 'any', BI.MESSAGE) END
MESSAGE,
COUNT(DISTINCT(B.BACKUP_ID)) NUM_BACKUP_RUNS,
SUM(SECONDS_BETWEEN(B.SYS_START_TIME, B.SYS_END_TIME) / 3600) *
SUM(BF.BACKUP_SIZE) / SUM(BF.TOTAL_BACKUP_SIZE) SUM_RUNTIME_H,
MAX(SECONDS_BETWEEN(B.SYS_START_TIME, B.SYS_END_TIME) / 3600) *
MAX(BF.BACKUP_SIZE / BF.TOTAL_BACKUP_SIZE) MAX_RUNTIME_H,
IFNULL(SUM(BF.BACKUP_SIZE / 1024 / 1024 ), 0) SUM_BACKUP_SIZE_MB,
IFNULL(MAX(BF.BACKUP_SIZE / 1024 / 1024 ), 0) MAX_BACKUP_SIZE_MB,
MAX(CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(B.SYS_START_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE B.SYS_START_TIME
END) MAX_START_TIME,
SUM(IFNULL(CASE WHEN B.ENTRY_TYPE_NAME = 'log backup' AND BF.SOURCE_TYPE_NAME
= 'volume' AND BF.BACKUP_SIZE / 1024 / 1024 >= L.SEGMENT_SIZE * 0.95 THEN 1 ELSE 0
END, 0)) NUM_LOG_FULL,
BI.MIN_BACKUP_TIME_S,
BI.AGGREGATION_TYPE,
BI.AGGREGATE_BY
FROM
( SELECT
CASE
WHEN BEGIN_TIME = 'C' THEN
CURRENT_TIMESTAMP
WHEN BEGIN_TIME LIKE 'C-S%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-S'))
WHEN BEGIN_TIME LIKE 'C-M%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-M') * 60)
WHEN BEGIN_TIME LIKE 'C-H%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-H') * 3600)
WHEN BEGIN_TIME LIKE 'C-D%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-D') * 86400)
WHEN BEGIN_TIME LIKE 'C-W%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-W') * 86400 * 7)
WHEN BEGIN_TIME LIKE 'E-S%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-S'))
WHEN BEGIN_TIME LIKE 'E-M%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-M') * 60)
WHEN BEGIN_TIME LIKE 'E-H%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-H') * 3600)
WHEN BEGIN_TIME LIKE 'E-D%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-D') * 86400)
WHEN BEGIN_TIME LIKE 'E-W%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-W') * 86400 * 7)
WHEN BEGIN_TIME = 'MIN' THEN
TO_TIMESTAMP('1000/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
WHEN SUBSTR(BEGIN_TIME, 1, 1) NOT IN ('C', 'E', 'M') THEN
TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS')
END BEGIN_TIME,
CASE
WHEN END_TIME = 'C' THEN CURRENT_TIMESTAMP
WHEN END_TIME LIKE 'C-S%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-S'))
WHEN END_TIME LIKE 'C-M%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-M') * 60)
WHEN END_TIME LIKE 'C-H%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-H') * 3600)
WHEN END_TIME LIKE 'C-D%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-D') * 86400)
WHEN END_TIME LIKE 'C-W%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-W') * 86400 * 7)
WHEN END_TIME LIKE 'B+S%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+S'))
WHEN END_TIME LIKE 'B+M%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+M') * 60)
WHEN END_TIME LIKE 'B+H%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+H') * 3600)
WHEN END_TIME LIKE 'B+D%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+D') * 86400)
WHEN END_TIME LIKE 'B+W%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+W') * 86400 * 7)
WHEN END_TIME = 'MAX' THEN
TO_TIMESTAMP('9999/12/31 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
WHEN SUBSTR(END_TIME, 1, 1) NOT IN ('C', 'B', 'M') THEN
TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS')
END END_TIME,
TIMEZONE,
HOST,
SERVICE_NAME,
BACKUP_TYPE,
BACKUP_DATA_TYPE,
BACKUP_STATUS,
MESSAGE,
MIN_BACKUP_TIME_S,
AGGREGATION_TYPE,
AGGREGATE_BY,
MAP(TIME_AGGREGATE_BY,
'NONE', 'YYYY/MM/DD HH24:MI:SS',
'HOUR', 'YYYY/MM/DD HH24',
'DAY', 'YYYY/MM/DD (DY)',
'HOUR_OF_DAY', 'HH24',
TIME_AGGREGATE_BY ) TIME_AGGREGATE_BY
FROM
( SELECT /*
Modification section */
'2019/06/01 00:00:00' BEGIN_TIME, /* YYYY/MM/DD
HH24:MI:SS timestamp, C, C-S<seconds>, C-M<minutes>, C-H<hours>, C-D<days>, C-
W<weeks>, E-S<seconds>, E-M<minutes>, E-H<hours>, E-D<days>, E-W<weeks>, MIN */
'2020/06/01 00:00:00' END_TIME, /* YYYY/MM/DD
HH24:MI:SS timestamp, C, C-S<seconds>, C-M<minutes>, C-H<hours>, C-D<days>, C-
W<weeks>, B+S<seconds>, B+M<minutes>, B+H<hours>, B+D<days>, B+W<weeks>, MAX */
'SERVER' TIMEZONE, /* SERVER, UTC */
'%' HOST,
'%' SERVICE_NAME,
'complete data backup' BACKUP_TYPE, /* e.g.
'log backup', 'complete data backup', 'incremental data backup', 'differential data
backup', 'data snapshot',
'DATA_BACKUP' for
all data backup and snapshot types */
'%' BACKUP_DATA_TYPE, /* VOLUME -> log or
data, CATALOG -> catalog, TOPOLOGY -> topology */
'successful' BACKUP_STATUS, /* e.g.
'successful', 'failed' */
'%' MESSAGE,
-1 MIN_BACKUP_TIME_S,
'AVG' AGGREGATION_TYPE, /* SUM, MAX, AVG */
'HOST, TIME, SERVICE, BACKUP_TYPE' AGGREGATE_BY, /* HOST, SERVICE,
TIME, BACKUP_ID, BACKUP_TYPE, BACKUP_DATA_TYPE, STATE, MESSAGE or comma separated
list, NONE for no aggregation */
'NONE' TIME_AGGREGATE_BY /* HOUR, DAY, HOUR_OF_DAY or database time
pattern, TS<seconds> for time slice, NONE for no aggregation */
FROM
DUMMY
)
) BI INNER JOIN
M_BACKUP_CATALOG B ON
CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(B.SYS_START_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE B.SYS_START_TIME END
BETWEEN BI.BEGIN_TIME AND BI.END_TIME AND
( BI.BACKUP_TYPE = 'DATA_BACKUP' AND B.ENTRY_TYPE_NAME IN ( 'complete data
backup', 'differential data backup', 'incremental data backup', 'data snapshot' )
OR
BI.BACKUP_TYPE != 'DATA_BACKUP' AND UPPER(B.ENTRY_TYPE_NAME) LIKE
UPPER(BI.BACKUP_TYPE)
) AND
B.STATE_NAME LIKE BI.BACKUP_STATUS AND
B.MESSAGE LIKE BI.MESSAGE LEFT OUTER JOIN
( SELECT
BACKUP_ID,
SOURCE_ID,
HOST,
SERVICE_TYPE_NAME,
SOURCE_TYPE_NAME,
BACKUP_SIZE,
SUM(BACKUP_SIZE) OVER (PARTITION BY BACKUP_ID) TOTAL_BACKUP_SIZE
FROM
M_BACKUP_CATALOG_FILES
) BF ON
B.BACKUP_ID = BF.BACKUP_ID LEFT OUTER JOIN
M_LOG_BUFFERS L ON
L.HOST = BF.HOST AND
L.VOLUME_ID = BF.SOURCE_ID
WHERE
IFNULL(BF.HOST, '') LIKE BI.HOST AND
IFNULL(BF.SERVICE_TYPE_NAME, '') LIKE BI.SERVICE_NAME AND
IFNULL(UPPER(BF.SOURCE_TYPE_NAME), '') LIKE UPPER(BI.BACKUP_DATA_TYPE)
GROUP BY
CASE
WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'TIME') != 0 THEN
CASE
WHEN BI.TIME_AGGREGATE_BY LIKE 'TS%' THEN
TO_VARCHAR(ADD_SECONDS(TO_TIMESTAMP('2014/01/01 00:00:00',
'YYYY/MM/DD HH24:MI:SS'), FLOOR(SECONDS_BETWEEN(TO_TIMESTAMP('2014/01/01 00:00:00',
'YYYY/MM/DD HH24:MI:SS'),
CASE BI.TIMEZONE WHEN 'UTC' THEN ADD_SECONDS(B.SYS_START_TIME,
SECONDS_BETWEEN(CURRENT_TIMESTAMP, CURRENT_UTCTIMESTAMP)) ELSE B.SYS_START_TIME
END) / SUBSTR(BI.TIME_AGGREGATE_BY, 3)) * SUBSTR(BI.TIME_AGGREGATE_BY, 3)),
'YYYY/MM/DD HH24:MI:SS')
ELSE TO_VARCHAR(CASE BI.TIMEZONE WHEN 'UTC' THEN
ADD_SECONDS(B.SYS_START_TIME, SECONDS_BETWEEN(CURRENT_TIMESTAMP,
CURRENT_UTCTIMESTAMP)) ELSE B.SYS_START_TIME END, BI.TIME_AGGREGATE_BY)
END
ELSE 'any'
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'HOST')
!= 0 THEN BF.HOST ELSE MAP(BI.HOST, '%',
'any', BI.HOST) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'SERVICE')
!= 0 THEN BF.SERVICE_TYPE_NAME ELSE MAP(BI.SERVICE_NAmE,
'%', 'any', BI.SERVICE_NAME) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'BACKUP_ID')
!= 0 THEN TO_VARCHAR(B.BACKUP_ID) ELSE 'any'
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'BACKUP_TYPE')
!= 0 THEN B.ENTRY_TYPE_NAME ELSE MAP(BI.BACKUP_TYPE,
'%', 'any', BI.BACKUP_TYPE) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY,
'BACKUP_DATA_TYPE') != 0 THEN BF.SOURCE_TYPE_NAME ELSE
MAP(BI.BACKUP_DATA_TYPE, '%', 'any', BI.BACKUP_DATA_TYPE) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'STATE')
!= 0 THEN B.STATE_NAME ELSE
MAP(BI.BACKUP_STATUS, '%', 'any', BI.BACKUP_STATUS) END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'MESSAGE')
!= 0 THEN CASE WHEN B.MESSAGE LIKE 'Not all data could be written%' THEN 'Not all
data could be written' ELSE B.MESSAGE END
ELSE MAP(BI.MESSAGE, '%', 'any', BI.MESSAGE) END,
BI.MIN_BACKUP_TIME_S,
BI.AGGREGATION_TYPE,
BI.AGGREGATE_BY
)
WHERE
( MIN_BACKUP_TIME_S = -1 OR SUM_RUNTIME_H >= MIN_BACKUP_TIME_S / 3600 )
)
ORDER BY
START_TIME DESC,
HOST,
SERVICE_NAME
WITH HINT (NO_JOIN_REMOVAL)