web-dev-qa-db-ja.com

毎月のデータベースの成長を計算または追跡する方法は?

Oracleを使用して、データベースの増加を毎月追跡するにはどうすればよいですか?以下は、SQLサーバーを使用して情報を格納するために使用したクエリの一部です。 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

以下のクエリは、DBA_HIST_SEG_STATを使用し、wr SNAPSHOTSとそのピリオドに基づいており、スナップショットごとのデータベースの増加を示しています。月次出力用に変更できます。

    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

SYS.DBA_DATA_FILESテーブルがあなたが探しているものだと思います。

IDEこれを使用することもできます。Spotlightfor Oracleと同様に、Toadにはかなり良いモニターがあります。

Oracle SQL Developer(無料のもの)にもモニターツールがあります。
http://nonfunctionaltestingtools.blogspot.com/2012/12/using-sql-developer-to-create-and-view.html ビューに移動-> DBAと作成セッション、次にストレージ->テーブルスペースに移動すると、メインウィンドウに情報が表示されます。

または、[表示]-> [DA]に移動してセッションを作成し、[ストレージ]-> [データファイル]に移動すると、詳細も表示されます。

0
MguerraTorres

これをすばやく簡単に行う方法は、データベースファイルのcreation_date列によるチェックとグループ化です。このクエリを見てください:

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

このスクリプトも良いです。リンクを確認してください: http://amitpawardba.blogspot.com/2015/10/Oracle-script-to-check-database-growth.html

0
r0tt