Oracle Spazio: differenze tra le versioni

Da Emigar.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
 
(24 versioni intermedie di uno stesso utente non sono mostrate)
Riga 2: Riga 2:
[[Oracle_ASM | Gestione ASM ]]
[[Oracle_ASM | Gestione ASM ]]
=Files e Tablespaces=
=Files e Tablespaces=
=Controllo Allocazione Spazio=
==Controllo Allocazione Spazio==
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.
Riga 177: Riga 177:


begin
begin
for c1 in (select file_id from dba_data_files)
for c1 in (select file_id from dba_data_files where autoextensible='NO')
loop
loop
execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
Riga 187: Riga 187:


begin
begin
for c1 in (select file_id from dba_data_files where tablespace_name='&1')
for c1 in (select file_id from dba_data_files where tablespace_name='&1' and autoextensible='NO')
loop
loop
execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
Riga 200: Riga 200:
loop
loop
execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize ' || c1.bytes;
execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize ' || c1.bytes;
end loop;
end;
/


Autoextend tempfiles:

begin
for c1 in (select file_id from dba_temp_files)
loop
execute immediate 'alter database tempfile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
end loop;
end loop;
end;
end;
Riga 255: Riga 244:
</pre>
</pre>


==Autoextend tempfiles==

Verificare se autoextend:
select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;

select 'alter database tempfile ' || file_id || ' autoextend on next 128M;' from dba_temp_files where autoextensible='NO' and tablespace_name='TEMPNEW2';


begin
for c1 in (select file_id from dba_temp_files)
loop
execute immediate 'alter database tempfile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
end loop;
end;
/

Preservando maxsize:
begin
for c1 in (select file_id,bytes from dba_temp_files)
loop
execute immediate 'alter database tempfile ' || c1.file_id || ' autoextend on next 128M maxsize ' || c1.bytes;
end loop;
end;
/

==shrink tempfiles==

select 'alter database tempfile ' || file_id || ' resize 8M;' from dba_temp_files where AUTOEXTENSIBLE='YES' and maxbytes >= bytes;

begin
for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE='YES' and maxbytes >= bytes)
loop
begin
execute immediate 'alter database tempfile ' || c1.file_id || ' resize 8M';
exception
when others then
null;
end;
end loop;
end;
/



===shrink temporary tablespace===
select 'alter tablespace ' || tablespace_name || ' shrink space;' from dba_tablespaces where contents='TEMPORARY';

==aggiunta datafiles e tempfiles==

aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)
<pre>
begin
for c1 in 5..10
loop
execute immediate 'alter tablespace TBSDATA add datafile ''/u01/app/oracle/oradata/ORCL/tbsdata_0' || c1 || '.dbf'' size 8M autoextend on next 128M maxsize unlimited';
end loop;
end;
/
</pre>

=Recyclebin=
==Schedula pulizia recycle bin==
==Schedula pulizia recycle bin==
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni
Riga 282: Riga 332:


</pre>
</pre>



=Temporary=
=Temporary=


=Segmenti=
=Segmenti=
Tablespace map

col owner for a20
select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name='&1' group by owner,segment_type order by 1,2;

col owner for a20
select tablespace_name,owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments group by tablespace_name,owner,segment_type order by 1,2,3;

=Segment Advisor=

--
set pagesize 200
set linesize 200
set autotrace off
-- select tablespace_name, segment_name, segment_type, partition_name,
-- recommendations, c1 from
-- table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE'));
spool segadv.txt
select '/*' || recommendations || ' */ ' || c1 || ';' from
table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE')) where c1 is not null order by segment_type,reclaimable_space;
spool off


Per eseguire lo shrink delle tabelle:


--
set verify off echo off
alter table &1 enable row movement;
-- non mette lock esclusivo ma non libera lo spazio
alter table &1 shrink space compact;
-- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine
alter table &1 shrink space;
alter table &1 disable row movement;
[[Categoria:Database]]
[[Categoria:Database]]

Versione attuale delle 23:22, 6 ott 2026

ASM

Gestione ASM

Files e Tablespaces

Controllo Allocazione Spazio

Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles. Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.

--

set pagesize 200
set linesize 200

with 
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),
 files as (select tablespace_name,count(file_name) nfiles,sum(case when maxbytes=0 then bytes else maxbytes end)/(1024*1024) max,sum(bytes)/(1024*1024) mba
             from dba_data_files group by tablespace_name)
select t.tablespace_name,
	t.block_size,
	f.nfiles,
        s.nsegs,
	round(f.max) max,
	round(s.mbs) mbs,
	round(f.max-s.mbs) sdiff,
	round(((f.max-s.mbs)/f.max)*100) pcts,
	round(f.mba) mba,
	round(f.mba-s.mbs) shrinkable,
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk
from dba_tablespaces t 
inner join files f on (t.tablespace_name=f.tablespace_name)
left outer join segs s on (t.tablespace_name=s.tablespace_name)
order by 10;

with
 tf as (select tablespace_name,count(*) nf,round(sum(bytes)/(1024*1024)) mba,round(sum(case when maxbytes=0 then bytes else maxbytes end)/(1024*1024)) max from dba_temp_files group by tablespace_name)
select	g.group_name,
	t.tablespace_name,
        f.nf nfiles,
	f.mba,
	f.max,
	round(s.allocated_space/(1024*1024)) mballoc,
	round(s.free_space/(1024*1024)) mbfree
   from tf f
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)
 where t.contents='TEMPORARY'
 order by 1,2,3;

Per 10.2

with
 tf as (select tablespace_name,count(*) nf,round(sum(bytes)/(1024*1024)) mba,round(sum(case when maxbytes=0 then bytes else maxbytes end)/(1024*1024)) max from dba_temp_files group by tablespace_name),
 tsh as (select tablespace_name,round(sum(bytes_used)/(1024*1024)) used,round(sum(bytes_free)/(1024*1024)) free from v$temp_space_header group by tablespace_name)
select
        t.tablespace_name,
        f.nf nfiles,
        f.mba,
        f.max,
        tsh.used mballoc,
        tsh.free mbfree
   from tf f
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)
 where t.contents='TEMPORARY'
 order by 1,2,3;


Sort Segments

SELECT tf.tablespace_name,
       ROUND(tf.total_space_mb) AS total_mb,
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb 
      FROM dba_temp_files GROUP BY tablespace_name) tf
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name='db_block_size')/(1024*1024) AS used_space_mb
           FROM v$sort_segment GROUP BY tablespace_name) tu
ON tf.tablespace_name = tu.tablespace_name;


Autoextend datafiles

Verificare se autoextend:

select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;

Autoextend datafiles:

begin
 for c1 in (select file_id from dba_data_files where autoextensible='NO')
 loop
   execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
 end loop;
end;
/

Su un solo tablespace

begin
 for c1 in (select file_id from dba_data_files where tablespace_name='&1' and autoextensible='NO')
 loop
   execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
 end loop;
end;
/

Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale

begin
 for c1 in (select file_id, bytes from dba_data_files where autoextensible='NO')
 loop
   execute immediate 'alter database datafile ' || c1.file_id || ' autoextend on next 128M maxsize ' || c1.bytes;
 end loop;
end;
/

Shrink datafiles

set linesize 1000 pagesize 0 feedback off trimspool on
with
 hwm as (
  -- get highest block id from each datafiles ( from x$ktfbue as we don't need all joins from dba_extents )
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn
 ),
 hwmts as (
  -- join ts# with tablespace_name
  select name tablespace_name,relative_fno,hwm_blocks
  from hwm join v$tablespace using(ts#)
 ),
 hwmdf as (
  -- join with datafiles, put 5M minimum for datafiles with no extents
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)
hwm_bytes,bytes,autoextensible,maxbytes
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)
 )
select
 case when autoextensible='YES' and maxbytes>=bytes
 then -- we generate resize statements only if autoextensible can grow back to current size
  '/* reclaim '||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)
   ||'M from '||to_char(ceil(bytes/1024/1024),999999)||'M */ '
   ||'alter database datafile '''||file_name||''' resize '||ceil(hwm_bytes/1024/1024)||'M;'
 else -- generate only a comment when autoextensible is off
  '/* reclaim '||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)
   ||'M from '||to_char(ceil(bytes/1024/1024),999999)
   ||'M after setting autoextensible maxsize higher than current size for file '
   || file_name||' */'
 end SQL
from hwmdf
where
 bytes-hwm_bytes>1024*1024 -- resize only if at least 1MB can be reclaimed
order by bytes-hwm_bytes desc
/

Autoextend tempfiles

Verificare se autoextend:

select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;
select 'alter database tempfile ' || file_id || ' autoextend on next 128M;' from dba_temp_files where autoextensible='NO' and tablespace_name='TEMPNEW2';


begin
 for c1 in (select file_id from dba_temp_files)
 loop
   execute immediate 'alter database tempfile ' || c1.file_id || ' autoextend on next 128M maxsize unlimited';
 end loop;
end;
/

Preservando maxsize:

begin
 for c1 in (select file_id,bytes from dba_temp_files)
 loop
   execute immediate 'alter database tempfile ' || c1.file_id || ' autoextend on next 128M maxsize ' || c1.bytes;
 end loop;
end;
/

shrink tempfiles

select 'alter database tempfile ' || file_id || ' resize 8M;' from dba_temp_files where AUTOEXTENSIBLE='YES' and maxbytes >= bytes;
begin
 for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE='YES' and maxbytes >= bytes)
  loop
   begin
    execute immediate 'alter database tempfile ' || c1.file_id || ' resize 8M';
      exception
       when others then
         null;
   end;
  end loop;
 end;
/


shrink temporary tablespace

select 'alter tablespace ' || tablespace_name || ' shrink space;' from dba_tablespaces where contents='TEMPORARY';

aggiunta datafiles e tempfiles

aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)

begin
   for c1 in 5..10
   loop
    execute immediate 'alter tablespace TBSDATA add datafile ''/u01/app/oracle/oradata/ORCL/tbsdata_0' || c1 || '.dbf'' size 8M autoextend on next 128M maxsize unlimited';
   end loop;
end;
/

Recyclebin

Schedula pulizia recycle bin

Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni

BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'purge_recyclebin_3days',
    job_type        => 'PLSQL_BLOCK',
    job_action      => '
begin
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,''YYYY-MM-DD:HH24:MI:SS'') < sysdate-3 and CAN_PURGE=''YES'')
   loop
     begin
       execute immediate ''purge '' || c1.type || '' '' || c1.owner || ''."'' || c1.object_name || ''"'';
       exception
        when others then
          null;
     end;
   end loop;
end;
',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'freq=daily; byhour=0; byminute=0; bysecond=0;',
    enabled         => TRUE);
END;
/

Temporary

Segmenti

Tablespace map

col owner for a20
select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name='&1' group by owner,segment_type order by 1,2;
col owner for a20
select tablespace_name,owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments group by tablespace_name,owner,segment_type order by 1,2,3;

Segment Advisor

--
set pagesize 200
set linesize 200
set autotrace off
-- select tablespace_name, segment_name, segment_type, partition_name,
-- recommendations, c1 from
-- table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE'));
spool segadv.txt
select '/*' || recommendations || ' */ ' || c1 || ';' from
 table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE')) where c1 is not null order by segment_type,reclaimable_space;
spool off

Per eseguire lo shrink delle tabelle:

--
set verify off echo off
alter table &1 enable row movement;
-- non mette lock esclusivo ma non libera lo spazio
alter table &1 shrink space compact;
-- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine
alter table &1 shrink space;         
alter table &1 disable row movement;