En utilisant Oracle, comment puis-je suivre la croissance de la base de données mensuellement? Ce qui suit est une requête en dehors d'une requête que j'ai utilisée pour stocker des informations à l'aide du serveur SQL. Existe-t-il un moyen de reproduire le même à l'aide d'Oracle?
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM
sys.tables t
la requête ci-dessous utilise DBA_HIST_SEG_STAT et se base sur des SNAPSHOTS awr et leur période donne la croissance de la base de données par instantané. vous pouvez le changer pour une sortie mensuelle.
set serveroutput on
execute dbms_output.enable(buffer_size => NULL);**
Declare
v_BaselineSize number(20);
v_CurrentSize number(20);
v_TotalGrowth number(20);
v_Space number(20);
cursor usageHist is
select a.snap_id,
SNAP_TIME,
sum(TOTAL_SPACE_ALLOCATED_DELTA) over ( order by a.SNAP_ID) ProgSum
from
(select SNAP_ID,
sum(SPACE_ALLOCATED_DELTA) TOTAL_SPACE_ALLOCATED_DELTA
from DBA_HIST_SEG_STAT
group by SNAP_ID
having sum(SPACE_ALLOCATED_TOTAL) <> 0
order by 1 ) a,
(select distinct SNAP_ID,
to_char(END_INTERVAL_TIME,'DD-Mon-YYYY HH24:Mi') SNAP_TIME
from DBA_HIST_SNAPSHOT) b
where a.snap_id=b.snap_id;
Begin
select sum(SPACE_ALLOCATED_DELTA) into v_TotalGrowth from DBA_HIST_SEG_STAT;
select sum(bytes) into v_CurrentSize from dba_segments;
v_BaselineSize := v_CurrentSize - v_TotalGrowth ;
dbms_output.put_line('SNAP_TIME Database Size(MB)');
for row in usageHist loop
v_Space := (v_BaselineSize + row.ProgSum)/(1024*1024);
dbms_output.put_line(row.SNAP_TIME || ' ' || to_char(v_Space) );
end loop;
end;
/
Je pense que la table SYS.DBA_DATA_FILES est ce que vous recherchez.
Je dois ajouter que vous voudrez peut-être utiliser un IDE pour cela. Toad a un assez bon moniteur pour cela, tout comme Spotlight pour Oracle.
Même Oracle SQL Developer (celui gratuit) dispose d'un outil de surveillance.
http://nonfunctionaltestingtools.blogspot.com/2012/12/using-sql-developer-to-create-and-view.html Allez dans Affichage -> DBA et créez une session, puis allez dans Stockage -> Tablespaces et les informations s'afficheront dans la fenêtre principale.
Ou allez dans Affichage -> DA et créez une session, puis allez dans Stockage -> Fichiers de données et il affichera également les détails.
Un moyen rapide et sale d'effectuer cela est la vérification et le regroupement par la colonne creation_date des fichiers de base de données. Regardez cette requête:
col growth_gb format 999G999D99
col month format a20
select to_char(creation_time, 'YYYY MM') month, sum(bytes)/1024/1024/1024 growth_gb
from v$datafile
where creation_time > SYSDATE - 720
group by to_char(creation_time, 'YYYY MM')
order by 1 desc
Ce script est également bon, vérifiez le lien: http://amitpawardba.blogspot.com/2015/10/Oracle-script-to-check-database-growth.html