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
- END_TIME
End time
- 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,
LPAD(TO_DECIMAL(RUNTIME_H * 60, 10, 2), 11) RUNTIME_MIN,
LPAD(TO_DECIMAL(BACKUP_SIZE_MB, 10, 2), 14) BACKUP_SIZE_MB,
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
BEGIN_TIME,
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 */
TO_TIMESTAMP('1900/01/01 12:00:00', 'YYYY/MM/DD HH24:MI:SS') BEGIN_TIME,
TO_TIMESTAMP('9999/01/13 12:00:00', 'YYYY/MM/DD HH24:MI:SS') END_TIME,
'SERVER' TIMEZONE, /* SERVER, UTC */
'%' HOST,
'%' SERVICE_NAME,
'log 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 */
'%' 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 */
'HOUR' 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 INNER 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 AND
BF.HOST LIKE BI.HOST AND
BF.SERVICE_TYPE_NAME LIKE BI.SERVICE_NAME AND
UPPER(BF.SOURCE_TYPE_NAME) LIKE UPPER(BI.BACKUP_DATA_TYPE) LEFT OUTER JOIN
M_LOG_BUFFERS L ON
L.HOST = BF.HOST AND
L.VOLUME_ID = BF.SOURCE_ID
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)