-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathadmin_archive_redo_log_heat_map.xml
245 lines (202 loc) · 11.9 KB
/
admin_archive_redo_log_heat_map.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
<?xml version="1.0" encoding="UTF-8" ?>
<displays>
<display id="c316d5f3-015d-1000-8001-ac1721168f27" type="" style="plsql-dbms_output" enable="true">
<name><![CDATA[Heat Map]]></name>
<description><![CDATA[]]></description>
<tooltip><![CDATA[]]></tooltip>
<drillclass><![CDATA[]]></drillclass>
<CustomValues>
</CustomValues>
<query>
<sql><![CDATA[-- David Mann
-- http://ba6.us
-- Archived Log Redo in GB Heat Map for past 31 Days
-- Requires access to v$archived_log, v$database
-- Usage (3 possiblities):
-- o Spool output to file and view with browser
-- o Use SQL Developer PL/SQL DBMS_OUTPUT report type
-- o Paste code into Apex PL/SQL output type and change DBMS_OUTPUT to HTP.P
-- I tried to use a scripted stylesheet but SQL Dev wouldn't cooperate so
-- that is my excuse for all of the ugly inline CSS. For now :)
-- Date Change
-- ----------- ---------------------------------------------------------------
-- 24-JUL-2012 Initial version
-- 25-OCT-2012 Only print max value number, trying to reduce visual complexity
-- 08-MAR-2016 Changed report to Redo in GB, updated calulations, added Total col
--SET SERVEROUTPUT ON
DECLARE
myMaxDay NUMBER;
myMaxHour NUMBER;
myDBName VARCHAR2(16);
-- dec2hex Function from http://www.orafaq.com/wiki/Hexadecimal
FUNCTION dec2hex (N in number) RETURN varchar2 IS
hexval varchar2(64);
N2 number := N;
digit number;
hexdigit char;
BEGIN
while ( N2 > 0 ) loop
digit := mod(N2, 16);
if digit > 9 then
hexdigit := chr(ascii('A') + digit - 10);
else
hexdigit := to_char(digit);
end if;
hexval := hexdigit || hexval;
N2 := trunc( N2 / 16 );
end loop;
return hexval;
END dec2hex;
FUNCTION DataCell ( P_Value NUMBER, P_Max NUMBER) RETURN VARCHAR2 IS
myReturn VARCHAR2(256);
myColorVal NUMBER;
myColorHex VARCHAR2(16);
BEGIN
-- Determine shade of red the P_Value should be compared to Solid Red for P_Max
-- Higher HEX values for G,B render as lighter colors
myColorVal := ROUND( 255-FLOOR(255 * (P_VALUE / P_MAX)));
myColorHex := LPAD(TRIM(dec2hex(myColorVal)) ,2,'0');
IF P_Value >= P_Max THEN
myColorHex := '00';
END IF;
myReturn := '<TD STYLE="background-color: #FF'||
myColorHex||
myColorHex||
'; font-family: monospace; text-align: right; border-left: 0px solid black; border-top: 0px solid black">';
myReturn := myReturn ||TO_CHAR(P_Value,'9999.9');
myReturn := myReturn ||'</TD>';
RETURN myReturn;
END DataCell;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
SELECT ROUND(MAX(ROUND(SUM(blocks*block_size)/1024/1024/1024)),1)
INTO myMaxDay
FROM v$archived_log
WHERE trunc(FIRST_TIME) >= trunc(sysdate - 31)
GROUP BY TO_CHAR(first_time,'YYYY-MM-DD');
SELECT ROUND(MAX(ROUND(SUM(blocks*block_size)/1024/1024/1024)),1)
INTO myMaxHour
FROM v$archived_log
WHERE trunc(FIRST_TIME) >= trunc(sysdate - 31)
GROUP BY TO_CHAR(first_time,'YYYY-MM-DD HH24');
SELECT NAME INTO myDBName FROM V$DATABASE;
DBMS_OUTPUT.PUT_LINE('<HTML>');
DBMS_OUTPUT.PUT_LINE('<CENTER>');
DBMS_OUTPUT.PUT_LINE('<H1>Archived Log Heat Map by Hourly and Daily Redo GB - '||myDBName||' - Past 31 days</H1>');
DBMS_OUTPUT.PUT_LINE('<TABLE STYLE="border: 1px solid black">');
DBMS_OUTPUT.PUT_LINE('<TR>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">Date / Hour</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">00</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">01</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">02</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">03</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">04</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">05</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">06</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">07</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">08</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">09</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">10</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">11</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">12</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">13</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">14</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">15</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">16</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">17</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">18</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">19</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">20</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">21</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">22</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">23</TD>');
DBMS_OUTPUT.PUT_LINE('<TD STYLE="font-family: monospace; font-weight: bold; background-color:#DEDEDE">Total</TD>');
DBMS_OUTPUT.PUT_LINE('<TR>');
FOR cur IN (
select trunc(first_time) AS Day,
sum(DECODE(to_char(first_time, 'HH24'), '00', blocks*block_size/1024/1024/1024, 0)) AS "00",
sum(DECODE(to_char(first_time, 'HH24'), '01', blocks*block_size/1024/1024/1024, 0)) AS "01",
sum(DECODE(to_char(first_time, 'HH24'), '02', blocks*block_size/1024/1024/1024, 0)) AS "02",
sum(DECODE(to_char(first_time, 'HH24'), '03', blocks*block_size/1024/1024/1024, 0)) AS "03",
sum(DECODE(to_char(first_time, 'HH24'), '04', blocks*block_size/1024/1024/1024, 0)) AS "04",
sum(DECODE(to_char(first_time, 'HH24'), '05', blocks*block_size/1024/1024/1024, 0)) AS "05",
sum(DECODE(to_char(first_time, 'HH24'), '06', blocks*block_size/1024/1024/1024, 0)) AS "06",
sum(DECODE(to_char(first_time, 'HH24'), '07', blocks*block_size/1024/1024/1024, 0)) AS "07",
sum(DECODE(to_char(first_time, 'HH24'), '08', blocks*block_size/1024/1024/1024, 0)) AS "08",
sum(DECODE(to_char(first_time, 'HH24'), '09', blocks*block_size/1024/1024/1024, 0)) AS "09",
sum(DECODE(to_char(first_time, 'HH24'), '10', blocks*block_size/1024/1024/1024, 0)) AS "10",
sum(DECODE(to_char(first_time, 'HH24'), '11', blocks*block_size/1024/1024/1024, 0)) AS "11",
sum(DECODE(to_char(first_time, 'HH24'), '12', blocks*block_size/1024/1024/1024, 0)) AS "12",
sum(DECODE(to_char(first_time, 'HH24'), '13', blocks*block_size/1024/1024/1024, 0)) AS "13",
sum(DECODE(to_char(first_time, 'HH24'), '14', blocks*block_size/1024/1024/1024, 0)) AS "14",
sum(DECODE(to_char(first_time, 'HH24'), '15', blocks*block_size/1024/1024/1024, 0)) AS "15",
sum(DECODE(to_char(first_time, 'HH24'), '16', blocks*block_size/1024/1024/1024, 0)) AS "16",
sum(DECODE(to_char(first_time, 'HH24'), '17', blocks*block_size/1024/1024/1024, 0)) AS "17",
sum(DECODE(to_char(first_time, 'HH24'), '18', blocks*block_size/1024/1024/1024, 0)) AS "18",
sum(DECODE(to_char(first_time, 'HH24'), '19', blocks*block_size/1024/1024/1024, 0)) AS "19",
sum(DECODE(to_char(first_time, 'HH24'), '20', blocks*block_size/1024/1024/1024, 0)) AS "20",
sum(DECODE(to_char(first_time, 'HH24'), '21', blocks*block_size/1024/1024/1024, 0)) AS "21",
sum(DECODE(to_char(first_time, 'HH24'), '22', blocks*block_size/1024/1024/1024, 0)) AS "22",
sum(DECODE(to_char(first_time, 'HH24'), '23', blocks*block_size/1024/1024/1024, 0)) AS "23",
sum(blocks*block_size/1024/1024/1024) as "Total"
FROM v$archived_log
WHERE trunc(FIRST_TIME) >= trunc(sysdate - 31)
GROUP BY trunc(first_time)
ORDER BY TRUNC(FIRST_TIME) DESC
)
LOOP
DBMS_OUTPUT.PUT_LINE('<TR>');
DBMS_OUTPUT.PUT_LINE('<TD style="font-family: monospace; font-weight: bold; background-color:#DEDEDE">'||
TO_CHAR(cur.Day,'DD-MON-YYYY')||'<EM></TD>');
DBMS_OUTPUT.PUT_LINE( DataCell(cur."00", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."01", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."02", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."03", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."04", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."05", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."06", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."07", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."08", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."09", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."10", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."11", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."12", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."13", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."14", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."15", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."16", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."17", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."18", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."19", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."20", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."21", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."22", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."23", myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur."Total", myMaxDay) );
DBMS_OUTPUT.PUT_LINE('</TR>');
END LOOP;
DBMS_OUTPUT.PUT_LINE('</TABLE>');
DBMS_OUTPUT.PUT_LINE('</CENTER>');
DBMS_OUTPUT.PUT_LINE('</HTML>');
END;]]></sql>
</query>
<pdf version="VERSION_1_7" compression="CONTENT">
<docproperty title="" author="" subject="" keywords="" />
<cell toppadding="2" bottompadding="2" leftpadding="2" rightpadding="2" horizontalalign="LEFT" verticalalign="TOP" wrap="true" />
<column>
<heading font="Times New Roman" size="10" style="NORMAL" color="-16777216" rowshading="-1" labeling="FIRST_PAGE" />
<footing font="Times New Roman" size="10" style="NORMAL" color="-16777216" rowshading="-1" labeling="NONE" />
<blob blob="NONE" zip="false" />
</column>
<table font="Times New Roman" size="10" style="NORMAL" color="-16777216" userowshading="false" oddrowshading="-1" evenrowshading="-1" showborders="true" spacingbefore="12" spacingafter="12" horizontalalign="LEFT" />
<header enable="false" generatedate="false">
<data>
null </data>
</header>
<footer enable="false" generatedate="false">
<data value="null" />
</footer>
<pagesetup papersize="LETTER" orientation="1" measurement="in" margintop="1.0" marginbottom="1.0" marginleft="1.0" marginright="1.0" />
</pdf>
</display>
</displays>