Historisierung der Tablespace-Belegung
Ein kleines Skript zur Historisierung der Tablespace-Ausnutzung
REM Zuerst die notwendigen Grants vergeben -----------------------------------------------
REM (natuerlich als SYS)
GRANT SELECT ON SYS.DBA_TABLESPACE_USAGE_METRICS TO SYSTEM;
GRANT SELECT ON SYS.DBA_TABLESPACES TO SYSTEM;
REM Dann die Tabelle fuer die Historierung anlegen ---------------------------------------
DROP TABLE SYSTEM.HIST$TABLESPACE_USAGE_METRICS;
CREATE TABLE SYSTEM.HIST$TABLESPACE_USAGE_METRICS
(
COLLECT_DATE DATE DEFAULT SYSDATE NOT NULL ,
TABLESPACE_NAME VARCHAR2(30) NOT NULL,
USED_SPACE_MB NUMBER NOT NULL
)
tablespace USERS;
REM Last but not least fuer ein automatisches Sammeln der Daten sorgen -------------------
REM 1. Die Prozedur
CREATE OR REPLACE PROCEDURE SYSTEM.INS_HIST_TS_USAGE_METRICS
IS
BEGIN
INSERT INTO SYSTEM.HIST$TABLESPACE_USAGE_METRICS
(
COLLECT_DATE,
TABLESPACE_NAME,
USED_SPACE_MB
)
SELECT
SYSDATE,
TS.TABLESPACE_NAME,
TRUNC(M.USED_SPACE*TS.BLOCK_SIZE/1024/1024)
FROM DBA_TABLESPACE_USAGE_METRICS M,DBA_TABLESPACES ts
where ts.tablespace_name=m.tablespace_name;
COMMIT;
END;
/
REM 2. Der Job für den Scheduler (1xtaeglich)
BEGIN
sys.dbms_scheduler.create_job(
job_name => '"SYSTEM"."COLLECT_TS_USAGE_METRICS"',
job_type => 'STORED_PROCEDURE',
job_action => '"SYSTEM"."INS_HIST_TS_USAGE_METRICS"',
repeat_interval => 'FREQ=DAILY;INTERVAL=1',
start_date => to_timestamp_tz('2013-08-14 07:00:00 Europe/Vienna', 'YYYY-MM-DD HH24:MI:SS TZR'),
job_class => '"DEFAULT_JOB_CLASS"',
comments => 'collect TS-usage history every day',
auto_drop => FALSE,
enabled => TRUE);
END;
/
REM --------------------------------------------------------------------------------------
REM und wenn die Daten nicht mehr gesammelt werden sollen, nicht vergessen:
REM 1. Den Job zu loeschen
REM 2. Die Prozedur zu loeschen
REM 3. Tabelle zu loeschen
REM --------------------------------------------------------------------------------------
Disclaimer: Please test the script before you use it, there may be errors 🙂