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 * 
FROM    DBA_DATA_FILES
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';

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;

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  


Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione