Monitoring Tablespace - creare un warning e critical alert
Colleghiamoci ad un pluggable database in stato read e write.
show con_name;
CON_NAME
------------------------------
PDBTS
show user;
USER è "PDBTSADM"
Creiamo un tablespace da mettere sotto monitororaggio.
create tablespace tbsalert
datafile '/u01/app/oracle/oradata/ORCL/pdbts/tbsalert.dbf'
size 50M logging
extent management local
segment space management auto;
Dimensione del tbs BYTES = 52428800
SELECT *
show con_name;
CON_NAME
------------------------------
PDBTS
show user;
USER è "PDBTSADM"
Creiamo un tablespace da mettere sotto monitororaggio.
create tablespace tbsalert
datafile '/u01/app/oracle/oradata/ORCL/pdbts/tbsalert.dbf'
size 50M logging
extent management local
segment space management auto;
Dimensione del tbs BYTES = 52428800
SELECT *
FROM DBA_DATA_FILES
WHERE tablespace_name='TBSALERT';
Spazio libero BYTES = 51380224 che è minore della dimensione del tbs per via dei metadata
SELECT *
WHERE tablespace_name='TBSALERT';
Spazio libero BYTES = 51380224 che è minore della dimensione del tbs per via dei metadata
SELECT *
FROM DBA_FREE_SPACE
WHERE tablespace_name='TBSALERT';
La percentuale di spazio libero del tbs è 98%.
SELECT df.tablespace_name tablespace, fs.bytes free, df.bytes, fs.bytes*100/ df.bytes pct_free
FROM DBA_DATA_FILES df , DBA_FREE_SPACE fs
WHERE df.tablespace_name = fs.tablespace_name
AND df.tablespace_name = 'TBSALERT';
Creiamo una warning e un critical alert con la seguente procedura impostando un warning di occupazione di spazio del tbs pari al 55% e un valore critico al 70%
begin
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id => dbms_server_alert.tablespace_pct_full,
warning_operator =>DBMS_SERVER_ALERT.OPERATOR_GE,
warning_value => '55',
critical_operator =>DBMS_SERVER_ALERT.OPERATOR_GE,
critical_value => '70',
observation_period => 1,
consecutive_occurrences => 1,
instance_name => 'orcl',
object_type =>DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
object_name => 'TBSALERT');
end;
Query per individuare i valori warning e critical
SELECT warning_value, critical_value
FROM DBA_THRESHOLDS
WHERE object_name= 'TBSALERT';
Query per individuare i messaggi di alert
SELECT *
begin
for i in 1..1000000
loop
insert into test5 values (i);
end loop;
commit;
end;
/
Vediamo nuovamente lo spazio occupato nel tbs.
SELECT df.tablespace_name tablespace, fs.bytes free, df.bytes,
fs.bytes*100/ df.bytes PCT_FREE
FROM dba_data_files df ,dba_free_space fs
WHERE df.tablespace_name = fs.tablespace_name
AND df.tablespace_name = 'TBSALERT';
TABLESPACE FREE BYTES PCT_FREE
------------------------------ ---------- ---------- ------------------------
TBSALERT 37748736 52428800 24
Mi aspetto pertanto un "critical alert" ma occorre aspettare 10-15 min perchè il porcesso MMON aggiorni i seguenti valori
SELECT * FROM dba_outstanding_alerts WHERE object_name='TBSALERT';
WHERE tablespace_name='TBSALERT';
La percentuale di spazio libero del tbs è 98%.
SELECT df.tablespace_name tablespace, fs.bytes free, df.bytes, fs.bytes*100/ df.bytes pct_free
FROM DBA_DATA_FILES df , DBA_FREE_SPACE fs
WHERE df.tablespace_name = fs.tablespace_name
AND df.tablespace_name = 'TBSALERT';
Creiamo una warning e un critical alert con la seguente procedura impostando un warning di occupazione di spazio del tbs pari al 55% e un valore critico al 70%
begin
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id => dbms_server_alert.tablespace_pct_full,
warning_operator =>DBMS_SERVER_ALERT.OPERATOR_GE,
warning_value => '55',
critical_operator =>DBMS_SERVER_ALERT.OPERATOR_GE,
critical_value => '70',
observation_period => 1,
consecutive_occurrences => 1,
instance_name => 'orcl',
object_type =>DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
object_name => 'TBSALERT');
end;
Query per individuare i valori warning e critical
SELECT warning_value, critical_value
FROM DBA_THRESHOLDS
WHERE object_name= 'TBSALERT';
WARNING_VALUE CRITICAL_VALUE
------------------------------------------------------------------
55 70
Query per individuare i messaggi di alert
SELECT *
FROM DBA_OUTSTANDING_ALERTS
WHERE object_name = 'TBSALERT';
Creiamo una tabella sul suddetto tablespace e popoliamola.
create table test5 ( x number ) tablespace TBSALERT;
Creiamo una tabella sul suddetto tablespace e popoliamola.
create table test5 ( x number ) tablespace TBSALERT;
begin
for i in 1..1000000
loop
insert into test5 values (i);
end loop;
commit;
end;
/
Vediamo nuovamente lo spazio occupato nel tbs.
SELECT df.tablespace_name tablespace, fs.bytes free, df.bytes,
fs.bytes*100/ df.bytes PCT_FREE
FROM dba_data_files df ,dba_free_space fs
WHERE df.tablespace_name = fs.tablespace_name
AND df.tablespace_name = 'TBSALERT';
TABLESPACE FREE BYTES PCT_FREE
------------------------------ ---------- ---------- ------------------------
TBSALERT 37748736 52428800 24
Mi aspetto pertanto un "critical alert" ma occorre aspettare 10-15 min perchè il porcesso MMON aggiorni i seguenti valori
SELECT * FROM dba_outstanding_alerts WHERE object_name='TBSALERT';
REASON SUGGESTED_ACTION MESSAGE_TYPE
------------------------------------------------------------------------------------------------------------------------------------------
La tablespace [TBSALERT@PDBTS] è piena al [76 percent] Aggiungere spazio alla tablespace Warning