web-dev-qa-db-fra.com

Comment calculer ou suivre la croissance mensuelle de la base de données?

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
2
Nigel Givans

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;
    /
1
mohsen.b

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.

0
MguerraTorres

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
0
Luis Santos
0
r0tt