<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>http://www.emigar.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiSysop</id>
	<title>Emigar - Contributi dell&amp;#039;utente [it]</title>
	<link rel="self" type="application/atom+xml" href="http://www.emigar.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiSysop"/>
	<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Speciale:Contributi/WikiSysop"/>
	<updated>2026-10-19T06:29:25Z</updated>
	<subtitle>Contributi dell&amp;#039;utente</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_RMAN&amp;diff=6481</id>
		<title>Oracle RMAN</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_RMAN&amp;diff=6481"/>
		<updated>2026-10-15T11:44:41Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Punto più recente disponibile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Duplicate Database==&lt;br /&gt;
&lt;br /&gt;
[[Oracle_Duplicate_Database|Duplicate Database]]&lt;br /&gt;
&lt;br /&gt;
=Restore=&lt;br /&gt;
&lt;br /&gt;
==Punto più recente disponibile==&lt;br /&gt;
Scenario: perdita completa del server, ripristino su un nuovo server.&lt;br /&gt;
In caso che allo startup si ottenga ORA-04014 a causa di ORA-04031, si può forzare rman ad avviare l&#039;istanza senza spfile impostando la SGA con questa variabile:&lt;br /&gt;
 ORA_RMAN_SGA_TARGET=1024&lt;br /&gt;
da rman:&lt;br /&gt;
 set dbid XXXXXXXXXX;&lt;br /&gt;
 startup nomount force;&lt;br /&gt;
 run {&lt;br /&gt;
 allocate channel c1 type disk;&lt;br /&gt;
 restore spfile from autobackup;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Per modificare tutti i percorsi che sul nuovo server sono diversi, si modifica l&#039;spfile appena ripristinato, serve valorizzare il parametro &amp;lt;code&amp;gt;spfile&amp;lt;/code&amp;gt; in modo che l&#039;istanza sappia dove scrivere le modifiche.&lt;br /&gt;
&lt;br /&gt;
Se da sqlplus:&lt;br /&gt;
 alter system set spfile=&#039;/u01/oracle/product/11.2.0.4/home1/dbs/spfileSID.ora&#039; scope=memory;&lt;br /&gt;
 alter system set db_create_file_dest=&#039;/u01/oradata&#039; scope=spfile sid=&#039;*&#039;;&lt;br /&gt;
 shutdown immediate&lt;br /&gt;
 startup mount&lt;br /&gt;
&lt;br /&gt;
se da rman:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sql &amp;quot;alter system set spfile=&#039;&#039;/u01/oracle/product/11.2.0.4/home1/dbs/spfileSID.ora&#039;&#039; scope=memory&amp;quot;;&lt;br /&gt;
sql &amp;quot;alter system set db_create_file_dest=&#039;&#039;/u01/oradata&#039;&#039; scope=spfile sid=&#039;&#039;*&#039;&#039;&amp;quot;;&lt;br /&gt;
sql &amp;quot;alter system reset control_files scope=spfile sid=&#039;&#039;*&#039;&#039;&amp;quot;;&lt;br /&gt;
shutdown immediate;&lt;br /&gt;
startup nomount;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si prosegue con il restore&lt;br /&gt;
da rman:&lt;br /&gt;
 set dbid XXXXXXXXXX;&lt;br /&gt;
 run {&lt;br /&gt;
 allocate channel c1 type disk;&lt;br /&gt;
 restore controlfile from autobackup;&lt;br /&gt;
 sql &#039;alter database mount&#039;;&lt;br /&gt;
 sql &#039;alter database disable block change tracking&#039;;&lt;br /&gt;
 set newname for database to new;&lt;br /&gt;
 restore database;&lt;br /&gt;
 switch datafile all;&lt;br /&gt;
 recover database;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Restore Point in time==&lt;br /&gt;
Restore point in time utilizando il catalogo, spfile presente, valorizzato &amp;lt;code&amp;gt;db_create_file_dest&amp;lt;/code&amp;gt; diverso dal database sorgente:&lt;br /&gt;
&lt;br /&gt;
 startup nomount force;&lt;br /&gt;
 run {&lt;br /&gt;
 set dbid XXXXXXXXXX;&lt;br /&gt;
 allocate channel c1 type disk;&lt;br /&gt;
 set until time &amp;quot;to_date(&#039;2021-06-15:01:00:00&#039;,&#039;YYYY-MM-DD:hh24:mi:ss&#039;)&amp;quot;;&lt;br /&gt;
 restore controlfile from autobackup;&lt;br /&gt;
 sql &#039;alter database mount&#039;;&lt;br /&gt;
 sql &#039;alter database disable block change tracking&#039;;&lt;br /&gt;
 set newname for database to new;&lt;br /&gt;
 restore database;&lt;br /&gt;
 switch datafile all;&lt;br /&gt;
 recover database;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Recupero schema da backup==&lt;br /&gt;
Istanza avviata con init o spfile:&lt;br /&gt;
 processes=200&lt;br /&gt;
 sga_target=10G&lt;br /&gt;
 pga_aggregate_target=2G&lt;br /&gt;
 db_block_size=8192&lt;br /&gt;
 compatible=&amp;quot;12.2.0&amp;quot;&lt;br /&gt;
 log_archive_dest_1=&amp;quot;location=+DG_ARCH&amp;quot;&lt;br /&gt;
 db_files=1000&lt;br /&gt;
 db_create_file_dest=&amp;quot;+DG_DATA&amp;quot;&lt;br /&gt;
 _system_trig_enabled=false&lt;br /&gt;
 db_name=&amp;quot;DBORA01&amp;quot;&lt;br /&gt;
 db_unique_name=&amp;quot;RECO01&amp;quot;&lt;br /&gt;
 diagnostic_dest=&amp;quot;/u01/app/oracle&amp;quot;&lt;br /&gt;
 control_files=&amp;quot;+DG_DATA/RECO01/controlfile/current.786.1075850995&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da rman:&lt;br /&gt;
 &lt;br /&gt;
 sql &#039;alter database mount clone database&#039;;&lt;br /&gt;
 run {&lt;br /&gt;
  set until time &amp;quot;to_date(&#039;2021-06-20:03:20:00&#039;,&#039;YYYY-MM-DD:HH24:MI:SS&#039;)&amp;quot;;&lt;br /&gt;
  set newname for database to new; &lt;br /&gt;
  restore database skip forever tablespace USERS,TBS01,TBS02 ;&lt;br /&gt;
  switch datafile all;&lt;br /&gt;
  recover database skip forever tablespace USERS,TBS01,TBS02 ;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Backup=&lt;br /&gt;
==backup archive==&lt;br /&gt;
per salvare gli ultimi archive generati, ma evitare salvataggi doppi e cancellazione degli archive dopo 1 giorno dalle generazione:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sintassi testata su rman 10.2&lt;br /&gt;
&lt;br /&gt;
 backup archivelog all not backed up 1 times to destination &amp;quot;sbt_tape&amp;quot;;&lt;br /&gt;
 backup as backupset device type sbt archivelog all not backed up 1 times;&lt;br /&gt;
 delete noprompt archivelog all backed up 1 times to device type sbt;&lt;br /&gt;
 delete noprompt archivelog all completed before &#039;sysdate-1&#039; backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
==Rman script windows==&lt;br /&gt;
===Template per multi retention===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
&lt;br /&gt;
for /f &amp;quot;skip=2&amp;quot; %%x in (&#039;wmic Path Win32_LocalTime get Day^,DayOfWeek /Format:List&#039;) do set %%x &amp;gt;NUL&lt;br /&gt;
&lt;br /&gt;
rem echo %Day% %DayOfWeek%&lt;br /&gt;
&lt;br /&gt;
rem Sovrascrivi per prove&lt;br /&gt;
rem set Day=1&lt;br /&gt;
rem set DayOfWeek=1&lt;br /&gt;
&lt;br /&gt;
rem echo %Day% %DayOfWeek%&lt;br /&gt;
&lt;br /&gt;
set BCK=ORD&lt;br /&gt;
if %DayOfWeek% EQU 0 set BCK=LT180&lt;br /&gt;
if %DayOfWeek% EQU 0 if %Day% GTR 7 set BCK=LT35&lt;br /&gt;
&lt;br /&gt;
echo %BCK%&lt;br /&gt;
(&lt;br /&gt;
echo spool log to %BCK%.log&lt;br /&gt;
echo list expired backup;&lt;br /&gt;
echo spool log off;&lt;br /&gt;
) &amp;gt; %BCK%.rman&lt;br /&gt;
&lt;br /&gt;
set ORACLE_SID=XXXXXXX&lt;br /&gt;
set NLS_LANG=ITALIAN_ITALY.WE8MSWIN1252&lt;br /&gt;
set NLS_DATE_FORMAT=DD-MM-YYYY HH24:MI:SS&lt;br /&gt;
&lt;br /&gt;
rman target / nocatalog cmdfile %BCK%.rman&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rman script linux==&lt;br /&gt;
===Versione multi retention===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# versione 12/09/2014 EG&lt;br /&gt;
&lt;br /&gt;
DAYW=$( date +%w )&lt;br /&gt;
case $DAYW in&lt;br /&gt;
0)&lt;br /&gt;
        LEVEL=&amp;quot; incremental level 0 &amp;quot;&lt;br /&gt;
	DAY=$( date +%d )&lt;br /&gt;
	if [ $DAY -gt 7 ]&lt;br /&gt;
	then &lt;br /&gt;
	  TAG=&amp;quot;LT35LEV0&amp;quot;&lt;br /&gt;
	  KEEP=&amp;quot; keep until time &#039;sysdate+35&#039; &amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
	  TAG=&amp;quot;LT180LEV0&amp;quot;&lt;br /&gt;
	  KEEP=&amp;quot; keep until time &#039;sysdate+180&#039; &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
        ;;&lt;br /&gt;
*)&lt;br /&gt;
        LEVEL=&amp;quot; incremental level 1 cumulative &amp;quot;&lt;br /&gt;
	TAG=&amp;quot;LEV1&amp;quot;&lt;br /&gt;
	KEEP=&amp;quot;&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
NLS_DATE_FORMAT=&#039;DD-MM-YYYY HH24:MI:SS&#039;; export NLS_DATE_FORMAT&lt;br /&gt;
NLS_LANG=&#039;ITALIAN_ITALY.WE8ISO8859P15&#039; ; export NLS_LANG&lt;br /&gt;
&lt;br /&gt;
rman target / nocatalog log /tmp/rman_${ORACLE_SID}.log &amp;lt;&amp;lt; EOF&lt;br /&gt;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO &#039;/tmp/snapcf_${ORACLE_SID}.f&#039;;&lt;br /&gt;
CONFIGURE CHANNEL DEVICE TYPE &#039;SBT_TAPE&#039; PARMS  &#039;SBT_LIBRARY=/asigra/libdsc_ora_sbt_Linux_x86_64.so,ENV=(CONNECT_INFO=/asigra/parms.txt)&#039;;&lt;br /&gt;
CONFIGURE DEFAULT DEVICE TYPE TO &#039;SBT_TAPE&#039;;&lt;br /&gt;
CONFIGURE CONTROLFILE AUTOBACKUP ON;&lt;br /&gt;
CONFIGURE BACKUP OPTIMIZATION ON;&lt;br /&gt;
&lt;br /&gt;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 22 DAYS;&lt;br /&gt;
&lt;br /&gt;
crosscheck archivelog all;&lt;br /&gt;
crosscheck backup device type sbt;&lt;br /&gt;
backup as compressed backupset &lt;br /&gt;
 archivelog all not backed up 1 times&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.arc.rman&#039;&lt;br /&gt;
   filesperset 20 delete all input;&lt;br /&gt;
&lt;br /&gt;
delete noprompt archivelog all backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
backup as compressed backupset&lt;br /&gt;
 ${LEVEL} tag ${TAG} ${KEEP}&lt;br /&gt;
 database&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.rman&#039;&lt;br /&gt;
   filesperset 20&lt;br /&gt;
 plus archivelog not backed up 1 times&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.arc.rman&#039;&lt;br /&gt;
   filesperset 20 delete all input;&lt;br /&gt;
&lt;br /&gt;
#delete noprompt archivelog until time &#039;sysdate -1&#039; backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
delete noprompt obsolete device type sbt;&lt;br /&gt;
delete noprompt expired backup device type sbt;&lt;br /&gt;
&lt;br /&gt;
ALLOCATE CHANNEL FOR MAINTENANCE TYPE DISK;&lt;br /&gt;
CROSSCHECK BACKUP DEVICE TYPE DISK;&lt;br /&gt;
#CROSSCHECK DATAFILECOPY ALL;&lt;br /&gt;
#DELETE NOPROMPT EXPIRED DATAFILECOPY ALL;&lt;br /&gt;
DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;&lt;br /&gt;
DELETE NOPROMPT EXPIRED BACKUP DEVICE TYPE DISK;&lt;br /&gt;
RELEASE CHANNEL;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Versione semplice con recovery window===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo $PATH&lt;br /&gt;
&lt;br /&gt;
PATH=$PATH:/usr/local/bin&lt;br /&gt;
export PATH&lt;br /&gt;
&lt;br /&gt;
#(( LEV = $( date +%w )  &amp;gt; 0 ? 1 : 0 ))&lt;br /&gt;
&lt;br /&gt;
DAYW=$( date +%w )&lt;br /&gt;
DAY=$( date +%d )&lt;br /&gt;
H=$( date +%H )&lt;br /&gt;
if [ $DAYW = 0 -a $H -le 3 ]&lt;br /&gt;
then&lt;br /&gt;
  LEV=0&lt;br /&gt;
else&lt;br /&gt;
  LEV=1&lt;br /&gt;
fi&lt;br /&gt;
NLS_LANG=ITALIAN_ITALY.UTF8 ; export NLS_LANG&lt;br /&gt;
NLS_DATE_FORMAT=&#039;DD/MM/YYYY HH24:MI:SS&#039;&lt;br /&gt;
&lt;br /&gt;
DST=/tmp&lt;br /&gt;
LEVEL=&amp;quot;incremental level ${LEV}&amp;quot;&lt;br /&gt;
TAG=&#039;tag TAG00&#039;&lt;br /&gt;
&lt;br /&gt;
ORACLE_SID=$1 ; export ORACLE_SID&lt;br /&gt;
ORAENV_ASK=NO ; export ORAENV_ASK&lt;br /&gt;
. oraenv&lt;br /&gt;
unset ORAENV_ASK&lt;br /&gt;
&lt;br /&gt;
## 6 ore 600 * 72&lt;br /&gt;
&lt;br /&gt;
if lockfile -60 -r 72 /tmp/backup_rman_${ORACLE_SID}.LCK&lt;br /&gt;
then&lt;br /&gt;
&lt;br /&gt;
rman target / nocatalog trace ${DST}/${ORACLE_SID}_rman_${DAY}_${H}.log &amp;lt;&amp;lt; EOF&lt;br /&gt;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO &#039;${DST}/snapcf_${ORACLE_SID}.f&#039;;&lt;br /&gt;
CONFIGURE DEFAULT DEVICE TYPE TO SBT;&lt;br /&gt;
CONFIGURE CHANNEL DEVICE TYPE &#039;SBT_TAPE&#039; PARMS  &#039;SBT_LIBRARY=/asigra/libdsc_ora_sbt_Linux_x86_64.so,ENV=(CONNECT_INFO=/asigra/parms_${ORACLE_SID}.txt)&#039;;&lt;br /&gt;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT TO &#039;%F&#039;;&lt;br /&gt;
CONFIGURE CONTROLFILE AUTOBACKUP ON;&lt;br /&gt;
CONFIGURE BACKUP OPTIMIZATION ON;&lt;br /&gt;
&lt;br /&gt;
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;&lt;br /&gt;
&lt;br /&gt;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 21 DAYS;&lt;br /&gt;
&lt;br /&gt;
crosscheck archivelog all;&lt;br /&gt;
crosscheck backup device type sbt;&lt;br /&gt;
backup as compressed backupset device type sbt&lt;br /&gt;
 ${LEVEL} ${TAG}&lt;br /&gt;
 database&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.db.rman&#039;&lt;br /&gt;
   filesperset 20&lt;br /&gt;
   include current controlfile&lt;br /&gt;
 spfile&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.spfile.rman&#039;&lt;br /&gt;
 plus archivelog not backed up 1 times&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.arc.rman&#039;&lt;br /&gt;
   filesperset 20 delete all input;&lt;br /&gt;
&lt;br /&gt;
delete noprompt archivelog all backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
delete noprompt expired backup;&lt;br /&gt;
delete noprompt obsolete;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
rm -f /tmp/backup_rman_${ORACLE_SID}.LCK&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Query per job di backup==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set lines 220&lt;br /&gt;
set pages 1000&lt;br /&gt;
col cf for 9,999&lt;br /&gt;
col df for 9,999&lt;br /&gt;
col elapsed_seconds heading &amp;quot;ELAPSED|SECONDS&amp;quot;&lt;br /&gt;
col i0 for 9,999&lt;br /&gt;
col i1 for 9,999&lt;br /&gt;
col l for 9,999&lt;br /&gt;
col output_mbytes for 9,999,999 heading &amp;quot;OUTPUT|MBYTES&amp;quot;&lt;br /&gt;
col session_recid for 999999 heading &amp;quot;SESSION|RECID&amp;quot;&lt;br /&gt;
col session_stamp for 99999999999 heading &amp;quot;SESSION|STAMP&amp;quot;&lt;br /&gt;
col status for a10 trunc&lt;br /&gt;
col time_taken_display for a10 heading &amp;quot;TIME|TAKEN&amp;quot;&lt;br /&gt;
col output_instance for 9999 heading &amp;quot;OUT|INST&amp;quot;&lt;br /&gt;
select&lt;br /&gt;
  to_char(j.start_time, &#039;yyyy-mm-dd hh24:mi:ss&#039;) start_time,&lt;br /&gt;
  to_char(j.end_time, &#039;yyyy-mm-dd hh24:mi:ss&#039;) end_time,&lt;br /&gt;
  (j.output_bytes/1024/1024) output_mbytes, j.status, j.input_type,&lt;br /&gt;
  decode(to_char(j.start_time, &#039;d&#039;), 1, &#039;Sunday&#039;, 2, &#039;Monday&#039;,&lt;br /&gt;
                                     3, &#039;Tuesday&#039;, 4, &#039;Wednesday&#039;,&lt;br /&gt;
                                     5, &#039;Thursday&#039;, 6, &#039;Friday&#039;,&lt;br /&gt;
                                     7, &#039;Saturday&#039;) dow,&lt;br /&gt;
  j.elapsed_seconds, j.time_taken_display,&lt;br /&gt;
  x.cf, x.df, x.i0, x.i1, x.l,&lt;br /&gt;
  ro.inst_id output_instance&lt;br /&gt;
from v$RMAN_BACKUP_JOB_DETAILS j&lt;br /&gt;
  left outer join (select&lt;br /&gt;
                     d.session_recid, d.session_stamp,&lt;br /&gt;
                     sum(case when d.controlfile_included = &#039;YES&#039; then d.pieces else 0 end) CF,&lt;br /&gt;
                     sum(case when d.controlfile_included = &#039;NO&#039;&lt;br /&gt;
                               and d.backup_type||d.incremental_level = &#039;D&#039; then d.pieces else 0 end) DF,&lt;br /&gt;
                     sum(case when d.backup_type||d.incremental_level = &#039;D0&#039; then d.pieces else 0 end) I0,&lt;br /&gt;
                     sum(case when d.backup_type||d.incremental_level = &#039;I1&#039; then d.pieces else 0 end) I1,&lt;br /&gt;
                     sum(case when d.backup_type = &#039;L&#039; then d.pieces else 0 end) L&lt;br /&gt;
                   from&lt;br /&gt;
                     v$BACKUP_SET_DETAILS d&lt;br /&gt;
                     join v$BACKUP_SET s on s.set_stamp = d.set_stamp and s.set_count = d.set_count&lt;br /&gt;
                   where s.input_file_scan_only = &#039;NO&#039;&lt;br /&gt;
                   group by d.session_recid, d.session_stamp) x&lt;br /&gt;
    on x.session_recid = j.session_recid and x.session_stamp = j.session_stamp&lt;br /&gt;
  left outer join (select o.session_recid, o.session_stamp, min(inst_id) inst_id&lt;br /&gt;
                   from v$RMAN_OUTPUT o&lt;br /&gt;
                   group by o.session_recid, o.session_stamp)&lt;br /&gt;
    ro on ro.session_recid = j.session_recid and ro.session_stamp = j.session_stamp&lt;br /&gt;
where j.start_time &amp;gt; trunc(sysdate)-&amp;amp;NUMBER_OF_DAYS&lt;br /&gt;
order by j.start_time&lt;br /&gt;
/&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_RMAN&amp;diff=6480</id>
		<title>Oracle RMAN</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_RMAN&amp;diff=6480"/>
		<updated>2026-10-15T09:45:33Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Punto più recente disponibile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Duplicate Database==&lt;br /&gt;
&lt;br /&gt;
[[Oracle_Duplicate_Database|Duplicate Database]]&lt;br /&gt;
&lt;br /&gt;
=Restore=&lt;br /&gt;
&lt;br /&gt;
==Punto più recente disponibile==&lt;br /&gt;
Scenario: perdita completa del server, ripristino su un nuovo server&lt;br /&gt;
In caso che allo startup dia errore di memoria, si può forzare rman ad avviare l&#039;istanza senza spfile con un più sga con questa variabile:&lt;br /&gt;
 ORA_RMAN_SGA_TARGET=1024&lt;br /&gt;
da rman:&lt;br /&gt;
 set dbid XXXXXXXXXX;&lt;br /&gt;
 startup nomount force;&lt;br /&gt;
 run {&lt;br /&gt;
 allocate channel c1 type disk;&lt;br /&gt;
 restore spfile from autobackup;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Per modificare tutti i percorsi che sul nuovo server sono diversi, si modifica l&#039;spfile appena ripristinato, serve valorizzare il parametro &amp;lt;code&amp;gt;spfile&amp;lt;/code&amp;gt; in modo che l&#039;istanza sappia dove scrivere le modifiche.&lt;br /&gt;
&lt;br /&gt;
Se da sqlplus:&lt;br /&gt;
 alter system set spfile=&#039;/u01/oracle/product/11.2.0.4/home1/dbs/spfileSID.ora&#039; scope=memory;&lt;br /&gt;
 alter system set db_create_file_dest=&#039;/u01/oradata&#039; scope=spfile sid=&#039;*&#039;;&lt;br /&gt;
 shutdown immediate&lt;br /&gt;
 startup mount&lt;br /&gt;
&lt;br /&gt;
se da rman:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sql &amp;quot;alter system set spfile=&#039;&#039;/u01/oracle/product/11.2.0.4/home1/dbs/spfileSID.ora&#039;&#039; scope=memory&amp;quot;;&lt;br /&gt;
sql &amp;quot;alter system set db_create_file_dest=&#039;&#039;/u01/oradata&#039;&#039; scope=spfile sid=&#039;&#039;*&#039;&#039;&amp;quot;;&lt;br /&gt;
sql &amp;quot;alter system reset control_files scope=spfile sid=&#039;&#039;*&#039;&#039;&amp;quot;;&lt;br /&gt;
shutdown immediate;&lt;br /&gt;
startup nomount;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si prosegue con il restore&lt;br /&gt;
da rman:&lt;br /&gt;
 set dbid XXXXXXXXXX;&lt;br /&gt;
 run {&lt;br /&gt;
 allocate channel c1 type disk;&lt;br /&gt;
 restore controlfile from autobackup;&lt;br /&gt;
 sql &#039;alter database mount&#039;;&lt;br /&gt;
 sql &#039;alter database disable block change tracking&#039;;&lt;br /&gt;
 set newname for database to new;&lt;br /&gt;
 restore database;&lt;br /&gt;
 switch datafile all;&lt;br /&gt;
 recover database;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Restore Point in time==&lt;br /&gt;
Restore point in time utilizando il catalogo, spfile presente, valorizzato &amp;lt;code&amp;gt;db_create_file_dest&amp;lt;/code&amp;gt; diverso dal database sorgente:&lt;br /&gt;
&lt;br /&gt;
 startup nomount force;&lt;br /&gt;
 run {&lt;br /&gt;
 set dbid XXXXXXXXXX;&lt;br /&gt;
 allocate channel c1 type disk;&lt;br /&gt;
 set until time &amp;quot;to_date(&#039;2021-06-15:01:00:00&#039;,&#039;YYYY-MM-DD:hh24:mi:ss&#039;)&amp;quot;;&lt;br /&gt;
 restore controlfile from autobackup;&lt;br /&gt;
 sql &#039;alter database mount&#039;;&lt;br /&gt;
 sql &#039;alter database disable block change tracking&#039;;&lt;br /&gt;
 set newname for database to new;&lt;br /&gt;
 restore database;&lt;br /&gt;
 switch datafile all;&lt;br /&gt;
 recover database;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Recupero schema da backup==&lt;br /&gt;
Istanza avviata con init o spfile:&lt;br /&gt;
 processes=200&lt;br /&gt;
 sga_target=10G&lt;br /&gt;
 pga_aggregate_target=2G&lt;br /&gt;
 db_block_size=8192&lt;br /&gt;
 compatible=&amp;quot;12.2.0&amp;quot;&lt;br /&gt;
 log_archive_dest_1=&amp;quot;location=+DG_ARCH&amp;quot;&lt;br /&gt;
 db_files=1000&lt;br /&gt;
 db_create_file_dest=&amp;quot;+DG_DATA&amp;quot;&lt;br /&gt;
 _system_trig_enabled=false&lt;br /&gt;
 db_name=&amp;quot;DBORA01&amp;quot;&lt;br /&gt;
 db_unique_name=&amp;quot;RECO01&amp;quot;&lt;br /&gt;
 diagnostic_dest=&amp;quot;/u01/app/oracle&amp;quot;&lt;br /&gt;
 control_files=&amp;quot;+DG_DATA/RECO01/controlfile/current.786.1075850995&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da rman:&lt;br /&gt;
 &lt;br /&gt;
 sql &#039;alter database mount clone database&#039;;&lt;br /&gt;
 run {&lt;br /&gt;
  set until time &amp;quot;to_date(&#039;2021-06-20:03:20:00&#039;,&#039;YYYY-MM-DD:HH24:MI:SS&#039;)&amp;quot;;&lt;br /&gt;
  set newname for database to new; &lt;br /&gt;
  restore database skip forever tablespace USERS,TBS01,TBS02 ;&lt;br /&gt;
  switch datafile all;&lt;br /&gt;
  recover database skip forever tablespace USERS,TBS01,TBS02 ;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Backup=&lt;br /&gt;
==backup archive==&lt;br /&gt;
per salvare gli ultimi archive generati, ma evitare salvataggi doppi e cancellazione degli archive dopo 1 giorno dalle generazione:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sintassi testata su rman 10.2&lt;br /&gt;
&lt;br /&gt;
 backup archivelog all not backed up 1 times to destination &amp;quot;sbt_tape&amp;quot;;&lt;br /&gt;
 backup as backupset device type sbt archivelog all not backed up 1 times;&lt;br /&gt;
 delete noprompt archivelog all backed up 1 times to device type sbt;&lt;br /&gt;
 delete noprompt archivelog all completed before &#039;sysdate-1&#039; backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
==Rman script windows==&lt;br /&gt;
===Template per multi retention===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
&lt;br /&gt;
for /f &amp;quot;skip=2&amp;quot; %%x in (&#039;wmic Path Win32_LocalTime get Day^,DayOfWeek /Format:List&#039;) do set %%x &amp;gt;NUL&lt;br /&gt;
&lt;br /&gt;
rem echo %Day% %DayOfWeek%&lt;br /&gt;
&lt;br /&gt;
rem Sovrascrivi per prove&lt;br /&gt;
rem set Day=1&lt;br /&gt;
rem set DayOfWeek=1&lt;br /&gt;
&lt;br /&gt;
rem echo %Day% %DayOfWeek%&lt;br /&gt;
&lt;br /&gt;
set BCK=ORD&lt;br /&gt;
if %DayOfWeek% EQU 0 set BCK=LT180&lt;br /&gt;
if %DayOfWeek% EQU 0 if %Day% GTR 7 set BCK=LT35&lt;br /&gt;
&lt;br /&gt;
echo %BCK%&lt;br /&gt;
(&lt;br /&gt;
echo spool log to %BCK%.log&lt;br /&gt;
echo list expired backup;&lt;br /&gt;
echo spool log off;&lt;br /&gt;
) &amp;gt; %BCK%.rman&lt;br /&gt;
&lt;br /&gt;
set ORACLE_SID=XXXXXXX&lt;br /&gt;
set NLS_LANG=ITALIAN_ITALY.WE8MSWIN1252&lt;br /&gt;
set NLS_DATE_FORMAT=DD-MM-YYYY HH24:MI:SS&lt;br /&gt;
&lt;br /&gt;
rman target / nocatalog cmdfile %BCK%.rman&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rman script linux==&lt;br /&gt;
===Versione multi retention===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# versione 12/09/2014 EG&lt;br /&gt;
&lt;br /&gt;
DAYW=$( date +%w )&lt;br /&gt;
case $DAYW in&lt;br /&gt;
0)&lt;br /&gt;
        LEVEL=&amp;quot; incremental level 0 &amp;quot;&lt;br /&gt;
	DAY=$( date +%d )&lt;br /&gt;
	if [ $DAY -gt 7 ]&lt;br /&gt;
	then &lt;br /&gt;
	  TAG=&amp;quot;LT35LEV0&amp;quot;&lt;br /&gt;
	  KEEP=&amp;quot; keep until time &#039;sysdate+35&#039; &amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
	  TAG=&amp;quot;LT180LEV0&amp;quot;&lt;br /&gt;
	  KEEP=&amp;quot; keep until time &#039;sysdate+180&#039; &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
        ;;&lt;br /&gt;
*)&lt;br /&gt;
        LEVEL=&amp;quot; incremental level 1 cumulative &amp;quot;&lt;br /&gt;
	TAG=&amp;quot;LEV1&amp;quot;&lt;br /&gt;
	KEEP=&amp;quot;&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
NLS_DATE_FORMAT=&#039;DD-MM-YYYY HH24:MI:SS&#039;; export NLS_DATE_FORMAT&lt;br /&gt;
NLS_LANG=&#039;ITALIAN_ITALY.WE8ISO8859P15&#039; ; export NLS_LANG&lt;br /&gt;
&lt;br /&gt;
rman target / nocatalog log /tmp/rman_${ORACLE_SID}.log &amp;lt;&amp;lt; EOF&lt;br /&gt;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO &#039;/tmp/snapcf_${ORACLE_SID}.f&#039;;&lt;br /&gt;
CONFIGURE CHANNEL DEVICE TYPE &#039;SBT_TAPE&#039; PARMS  &#039;SBT_LIBRARY=/asigra/libdsc_ora_sbt_Linux_x86_64.so,ENV=(CONNECT_INFO=/asigra/parms.txt)&#039;;&lt;br /&gt;
CONFIGURE DEFAULT DEVICE TYPE TO &#039;SBT_TAPE&#039;;&lt;br /&gt;
CONFIGURE CONTROLFILE AUTOBACKUP ON;&lt;br /&gt;
CONFIGURE BACKUP OPTIMIZATION ON;&lt;br /&gt;
&lt;br /&gt;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 22 DAYS;&lt;br /&gt;
&lt;br /&gt;
crosscheck archivelog all;&lt;br /&gt;
crosscheck backup device type sbt;&lt;br /&gt;
backup as compressed backupset &lt;br /&gt;
 archivelog all not backed up 1 times&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.arc.rman&#039;&lt;br /&gt;
   filesperset 20 delete all input;&lt;br /&gt;
&lt;br /&gt;
delete noprompt archivelog all backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
backup as compressed backupset&lt;br /&gt;
 ${LEVEL} tag ${TAG} ${KEEP}&lt;br /&gt;
 database&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.rman&#039;&lt;br /&gt;
   filesperset 20&lt;br /&gt;
 plus archivelog not backed up 1 times&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.arc.rman&#039;&lt;br /&gt;
   filesperset 20 delete all input;&lt;br /&gt;
&lt;br /&gt;
#delete noprompt archivelog until time &#039;sysdate -1&#039; backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
delete noprompt obsolete device type sbt;&lt;br /&gt;
delete noprompt expired backup device type sbt;&lt;br /&gt;
&lt;br /&gt;
ALLOCATE CHANNEL FOR MAINTENANCE TYPE DISK;&lt;br /&gt;
CROSSCHECK BACKUP DEVICE TYPE DISK;&lt;br /&gt;
#CROSSCHECK DATAFILECOPY ALL;&lt;br /&gt;
#DELETE NOPROMPT EXPIRED DATAFILECOPY ALL;&lt;br /&gt;
DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;&lt;br /&gt;
DELETE NOPROMPT EXPIRED BACKUP DEVICE TYPE DISK;&lt;br /&gt;
RELEASE CHANNEL;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Versione semplice con recovery window===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo $PATH&lt;br /&gt;
&lt;br /&gt;
PATH=$PATH:/usr/local/bin&lt;br /&gt;
export PATH&lt;br /&gt;
&lt;br /&gt;
#(( LEV = $( date +%w )  &amp;gt; 0 ? 1 : 0 ))&lt;br /&gt;
&lt;br /&gt;
DAYW=$( date +%w )&lt;br /&gt;
DAY=$( date +%d )&lt;br /&gt;
H=$( date +%H )&lt;br /&gt;
if [ $DAYW = 0 -a $H -le 3 ]&lt;br /&gt;
then&lt;br /&gt;
  LEV=0&lt;br /&gt;
else&lt;br /&gt;
  LEV=1&lt;br /&gt;
fi&lt;br /&gt;
NLS_LANG=ITALIAN_ITALY.UTF8 ; export NLS_LANG&lt;br /&gt;
NLS_DATE_FORMAT=&#039;DD/MM/YYYY HH24:MI:SS&#039;&lt;br /&gt;
&lt;br /&gt;
DST=/tmp&lt;br /&gt;
LEVEL=&amp;quot;incremental level ${LEV}&amp;quot;&lt;br /&gt;
TAG=&#039;tag TAG00&#039;&lt;br /&gt;
&lt;br /&gt;
ORACLE_SID=$1 ; export ORACLE_SID&lt;br /&gt;
ORAENV_ASK=NO ; export ORAENV_ASK&lt;br /&gt;
. oraenv&lt;br /&gt;
unset ORAENV_ASK&lt;br /&gt;
&lt;br /&gt;
## 6 ore 600 * 72&lt;br /&gt;
&lt;br /&gt;
if lockfile -60 -r 72 /tmp/backup_rman_${ORACLE_SID}.LCK&lt;br /&gt;
then&lt;br /&gt;
&lt;br /&gt;
rman target / nocatalog trace ${DST}/${ORACLE_SID}_rman_${DAY}_${H}.log &amp;lt;&amp;lt; EOF&lt;br /&gt;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO &#039;${DST}/snapcf_${ORACLE_SID}.f&#039;;&lt;br /&gt;
CONFIGURE DEFAULT DEVICE TYPE TO SBT;&lt;br /&gt;
CONFIGURE CHANNEL DEVICE TYPE &#039;SBT_TAPE&#039; PARMS  &#039;SBT_LIBRARY=/asigra/libdsc_ora_sbt_Linux_x86_64.so,ENV=(CONNECT_INFO=/asigra/parms_${ORACLE_SID}.txt)&#039;;&lt;br /&gt;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT TO &#039;%F&#039;;&lt;br /&gt;
CONFIGURE CONTROLFILE AUTOBACKUP ON;&lt;br /&gt;
CONFIGURE BACKUP OPTIMIZATION ON;&lt;br /&gt;
&lt;br /&gt;
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;&lt;br /&gt;
&lt;br /&gt;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 21 DAYS;&lt;br /&gt;
&lt;br /&gt;
crosscheck archivelog all;&lt;br /&gt;
crosscheck backup device type sbt;&lt;br /&gt;
backup as compressed backupset device type sbt&lt;br /&gt;
 ${LEVEL} ${TAG}&lt;br /&gt;
 database&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.db.rman&#039;&lt;br /&gt;
   filesperset 20&lt;br /&gt;
   include current controlfile&lt;br /&gt;
 spfile&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.spfile.rman&#039;&lt;br /&gt;
 plus archivelog not backed up 1 times&lt;br /&gt;
   format &#039;ora.%d.%s.%p.%t.%u.arc.rman&#039;&lt;br /&gt;
   filesperset 20 delete all input;&lt;br /&gt;
&lt;br /&gt;
delete noprompt archivelog all backed up 1 times to device type sbt;&lt;br /&gt;
&lt;br /&gt;
delete noprompt expired backup;&lt;br /&gt;
delete noprompt obsolete;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
rm -f /tmp/backup_rman_${ORACLE_SID}.LCK&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Query per job di backup==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set lines 220&lt;br /&gt;
set pages 1000&lt;br /&gt;
col cf for 9,999&lt;br /&gt;
col df for 9,999&lt;br /&gt;
col elapsed_seconds heading &amp;quot;ELAPSED|SECONDS&amp;quot;&lt;br /&gt;
col i0 for 9,999&lt;br /&gt;
col i1 for 9,999&lt;br /&gt;
col l for 9,999&lt;br /&gt;
col output_mbytes for 9,999,999 heading &amp;quot;OUTPUT|MBYTES&amp;quot;&lt;br /&gt;
col session_recid for 999999 heading &amp;quot;SESSION|RECID&amp;quot;&lt;br /&gt;
col session_stamp for 99999999999 heading &amp;quot;SESSION|STAMP&amp;quot;&lt;br /&gt;
col status for a10 trunc&lt;br /&gt;
col time_taken_display for a10 heading &amp;quot;TIME|TAKEN&amp;quot;&lt;br /&gt;
col output_instance for 9999 heading &amp;quot;OUT|INST&amp;quot;&lt;br /&gt;
select&lt;br /&gt;
  to_char(j.start_time, &#039;yyyy-mm-dd hh24:mi:ss&#039;) start_time,&lt;br /&gt;
  to_char(j.end_time, &#039;yyyy-mm-dd hh24:mi:ss&#039;) end_time,&lt;br /&gt;
  (j.output_bytes/1024/1024) output_mbytes, j.status, j.input_type,&lt;br /&gt;
  decode(to_char(j.start_time, &#039;d&#039;), 1, &#039;Sunday&#039;, 2, &#039;Monday&#039;,&lt;br /&gt;
                                     3, &#039;Tuesday&#039;, 4, &#039;Wednesday&#039;,&lt;br /&gt;
                                     5, &#039;Thursday&#039;, 6, &#039;Friday&#039;,&lt;br /&gt;
                                     7, &#039;Saturday&#039;) dow,&lt;br /&gt;
  j.elapsed_seconds, j.time_taken_display,&lt;br /&gt;
  x.cf, x.df, x.i0, x.i1, x.l,&lt;br /&gt;
  ro.inst_id output_instance&lt;br /&gt;
from v$RMAN_BACKUP_JOB_DETAILS j&lt;br /&gt;
  left outer join (select&lt;br /&gt;
                     d.session_recid, d.session_stamp,&lt;br /&gt;
                     sum(case when d.controlfile_included = &#039;YES&#039; then d.pieces else 0 end) CF,&lt;br /&gt;
                     sum(case when d.controlfile_included = &#039;NO&#039;&lt;br /&gt;
                               and d.backup_type||d.incremental_level = &#039;D&#039; then d.pieces else 0 end) DF,&lt;br /&gt;
                     sum(case when d.backup_type||d.incremental_level = &#039;D0&#039; then d.pieces else 0 end) I0,&lt;br /&gt;
                     sum(case when d.backup_type||d.incremental_level = &#039;I1&#039; then d.pieces else 0 end) I1,&lt;br /&gt;
                     sum(case when d.backup_type = &#039;L&#039; then d.pieces else 0 end) L&lt;br /&gt;
                   from&lt;br /&gt;
                     v$BACKUP_SET_DETAILS d&lt;br /&gt;
                     join v$BACKUP_SET s on s.set_stamp = d.set_stamp and s.set_count = d.set_count&lt;br /&gt;
                   where s.input_file_scan_only = &#039;NO&#039;&lt;br /&gt;
                   group by d.session_recid, d.session_stamp) x&lt;br /&gt;
    on x.session_recid = j.session_recid and x.session_stamp = j.session_stamp&lt;br /&gt;
  left outer join (select o.session_recid, o.session_stamp, min(inst_id) inst_id&lt;br /&gt;
                   from v$RMAN_OUTPUT o&lt;br /&gt;
                   group by o.session_recid, o.session_stamp)&lt;br /&gt;
    ro on ro.session_recid = j.session_recid and ro.session_stamp = j.session_stamp&lt;br /&gt;
where j.start_time &amp;gt; trunc(sysdate)-&amp;amp;NUMBER_OF_DAYS&lt;br /&gt;
order by j.start_time&lt;br /&gt;
/&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6479</id>
		<title>MSSQL backup e restore</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6479"/>
		<updated>2026-10-14T11:00:02Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* caso semplice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==salvataggio==&lt;br /&gt;
===Recovery Model===&lt;br /&gt;
Verificare il Recovery Model del database:&lt;br /&gt;
 SELECT name,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Eventualmente modificarlo:&lt;br /&gt;
 ALTER DATABASE &amp;lt;database_name&amp;gt; SET RECOVERY FULL&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
===Salvataggio===&lt;br /&gt;
Salvataggio&lt;br /&gt;
 backup database MioDatabase to disk = &#039;/backup/MioDatabase.bak&#039;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Salvataggio differenziale (i delta dall&#039;ultimo full)&lt;br /&gt;
 BACKUP DATABASE [NomeDatabase]  TO DISK = &#039;C:\Backup\NomeDatabase_diff.bak&#039;  WITH DIFFERENTIAL, INIT, FORMAT, COMPRESSION&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Per per salvare solo il transaction log:&lt;br /&gt;
 BACKUP LOG MioDatabase TO DISK = &#039;/backup/MioDatabase_20260611.trn&#039; WITH INIT, FORMAT, COMPRESSION&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per verificare svuotamento del transaction log:&lt;br /&gt;
 SELECT * FROM sys.dm_db_log_space_usage;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Con versioni precedenti alla 2019:&lt;br /&gt;
 DBCC SQLPERF(LOGSPACE);&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Riferimenti: [https://learn.microsoft.com/it-it/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver17]&lt;br /&gt;
&lt;br /&gt;
==ripristino==&lt;br /&gt;
===caso semplice===&lt;br /&gt;
Per leggere il contenuto di un backup, serve eventualmente per modificare i percorsi dei files da restorare&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
===restore da full e differenziale===&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE [NomeDatabase] FROM DISK = &#039;C:\Backup\NomeDatabase_full.bak&#039; WITH NORECOVERY;&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE [NomeDatabase] FROM DISK = &#039;C:\Backup\NomeDatabase_diff.bak&#039; WITH RECOVERY;&lt;br /&gt;
&lt;br /&gt;
===con spostamento di percorso===&lt;br /&gt;
 RESTORE FILELISTONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE MioDatabase&lt;br /&gt;
   FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
   WITH RECOVERY,&lt;br /&gt;
   MOVE &#039;MioDatabase_Data&#039; TO &#039;/nuovo_percorso/MioDatabase_Data.mdf&#039;,&lt;br /&gt;
   MOVE &#039;MioDatabase_Log&#039; TO &#039;/nuovo_percorso/MioDatabase_Log.ldf&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
===ripristino da completo, incrementali e transaction log===&lt;br /&gt;
Per restore database e transaction log:&lt;br /&gt;
&lt;br /&gt;
Utile per capire quando è stato eseguito il backup dei log e quale intervallo di tempo copre:&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK=&#039;/backup/MioDB_log_001.trn&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_full.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_incremental.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log01.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
L&#039;ultimo backup del transaction log viene ripristinato con l&#039;opzione &amp;lt;code&amp;gt;recovery&amp;lt;/code&amp;gt;:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per point in time:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with stopat=&#039;2026-06-10T15:30:00&#039;,recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
==post restore==&lt;br /&gt;
&lt;br /&gt;
 SELECT name,state_desc,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
Eventualmente cambiare il compatibility level&lt;br /&gt;
 select name,compatibility_level from sys.databases&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
 alter database MioDatabase set compatibility_level=170&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=snapshot=&lt;br /&gt;
Possibile solo con enterprise Edition e dalla versione 2012.&lt;br /&gt;
&lt;br /&gt;
Creazione snapshot&lt;br /&gt;
 CREATE DATABASE [SCHTCPOS_SS_20261012_110304] ON (NAME = [sofleo_atg_migration_01], FILENAME = &#039;G:\snapshot\SCHTCPOS_SS_20261012_110304_sofleo_atg_migration_01.ss&#039;) AS SNAPSHOT OF [SCHTCPOS];&lt;br /&gt;
&lt;br /&gt;
Restore da snapshot&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET SINGLE_USER WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 RESTORE DATABASE [SCHTCPOS] from database_snapshot=&#039;SCHTCPOS_SS_20261012_110304&#039;;&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET MULTI_USER;&lt;br /&gt;
&lt;br /&gt;
Cancellazione snapshot&lt;br /&gt;
 DROP DATABASE [SCHTCPOS_SS_20261012_110304];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per generare comando di esecuzione snapshot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Script per la generazione dinamica del comando CREATE DATABASE SNAPSHOT&lt;br /&gt;
-- Target directory: G:\snapshot\&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
DECLARE @SourceDB SYSNAME = &#039;TuoNomeDatabase&#039;; -- Sostituisci con il nome del tuo database&lt;br /&gt;
DECLARE @SnapshotName SYSNAME = @SourceDB + &#039;_SS_&#039; + CONVERT(VARCHAR(8), GETDATE(), 112) + &#039;_&#039; + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), &#039;:&#039;, &#039;&#039;);&lt;br /&gt;
DECLARE @SnapshotPath NVARCHAR(512) = N&#039;G:\snapshot\&#039;;&lt;br /&gt;
&lt;br /&gt;
DECLARE @SQL NVARCHAR(MAX) = N&#039;CREATE DATABASE &#039; + QUOTENAME(@SnapshotName) + &#039; ON &#039;;&lt;br /&gt;
&lt;br /&gt;
-- Recupera dinamicamente tutti i file di dati (tipo 0 = Row data) del database sorgente&lt;br /&gt;
SELECT @SQL = @SQL + STUFF((&lt;br /&gt;
    SELECT &lt;br /&gt;
        N&#039;, (NAME = &#039; + QUOTENAME(f.name) + &lt;br /&gt;
        N&#039;, FILENAME = &#039;&#039;&#039; + @SnapshotPath + @SnapshotName + N&#039;_&#039; + f.name + N&#039;.ss&#039;&#039;)&#039;&lt;br /&gt;
    FROM sys.master_files f&lt;br /&gt;
    WHERE f.database_id = DB_ID(@SourceDB)&lt;br /&gt;
      AND f.type = 0 -- Solo file di dati (esclude i file di log)&lt;br /&gt;
    FOR XML PATH(&#039;&#039;), TYPE).value(&#039;.&#039;, &#039;NVARCHAR(MAX)&#039;), 1, 2, N&#039;&#039;) + &lt;br /&gt;
    N&#039; AS SNAPSHOT OF &#039; + QUOTENAME(@SourceDB) + N&#039;;&#039;;&lt;br /&gt;
&lt;br /&gt;
-- Stampa a schermo il comando generato (utile per verifica o log)&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT &#039;Comando generato per lo Snapshot:&#039;;&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT @SQL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=storico backup=&lt;br /&gt;
Interroga gli eventi di backup via VSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    bs.database_name,&lt;br /&gt;
    bs.backup_start_date,&lt;br /&gt;
    bs.backup_finish_date,&lt;br /&gt;
    CASE bs.type &lt;br /&gt;
        WHEN &#039;D&#039; THEN &#039;Full&#039;&lt;br /&gt;
        WHEN &#039;I&#039; THEN &#039;Differential&#039;&lt;br /&gt;
        WHEN &#039;L&#039; THEN &#039;Log&#039;&lt;br /&gt;
    END AS backup_type,&lt;br /&gt;
    bs.is_snapshot,&lt;br /&gt;
    bs.is_copy_only,&lt;br /&gt;
    bs.name AS backup_set_name,&lt;br /&gt;
    bmf.physical_device_name&lt;br /&gt;
FROM msdb.dbo.backupset bs&lt;br /&gt;
JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id&lt;br /&gt;
WHERE (bs.is_snapshot = 1 -- solo backup via snapshot VSS&lt;br /&gt;
   OR bmf.physical_device_name LIKE &#039;{%&#039;) -- I backup VSS generano spesso GUID virtuali come dispositivo&lt;br /&gt;
  AND (bs.backup_start_date between &#039;2026-09-22 01:00:00&#039; and &#039;2026-09-22 05:00:00&#039;)&lt;br /&gt;
ORDER BY bs.backup_start_date DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eventi di snapshot&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O is frozen&#039;;&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O was resumed&#039;;&lt;br /&gt;
 &lt;br /&gt;
Per filtrare per data&lt;br /&gt;
 DECLARE @StartDate DATETIME = &#039;2026-09-25 00:00:00&#039;;&lt;br /&gt;
 DECLARE @EndDate   DATETIME = &#039;2026-09-25 10:00:00&#039;;&lt;br /&gt;
 EXEC sys.xp_readerrorlog &lt;br /&gt;
    0,                      -- Log attuale&lt;br /&gt;
    1,                      -- SQL Server Log&lt;br /&gt;
    N&#039;I/O was resumed&#039;,     -- Testo da cercare&lt;br /&gt;
    NULL,                   -- Secondo testo (opzionale)&lt;br /&gt;
    @StartDate,             -- Data/Ora inizio&lt;br /&gt;
    @EndDate,               -- Data/Ora fine&lt;br /&gt;
    N&#039;DESC&#039;;                -- Ordine di visualizzazione&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:MS SQL Server]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6478</id>
		<title>MSSQL backup e restore</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6478"/>
		<updated>2026-10-14T08:44:58Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* salvataggio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==salvataggio==&lt;br /&gt;
===Recovery Model===&lt;br /&gt;
Verificare il Recovery Model del database:&lt;br /&gt;
 SELECT name,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Eventualmente modificarlo:&lt;br /&gt;
 ALTER DATABASE &amp;lt;database_name&amp;gt; SET RECOVERY FULL&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
===Salvataggio===&lt;br /&gt;
Salvataggio&lt;br /&gt;
 backup database MioDatabase to disk = &#039;/backup/MioDatabase.bak&#039;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Salvataggio differenziale (i delta dall&#039;ultimo full)&lt;br /&gt;
 BACKUP DATABASE [NomeDatabase]  TO DISK = &#039;C:\Backup\NomeDatabase_diff.bak&#039;  WITH DIFFERENTIAL, INIT, FORMAT, COMPRESSION&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Per per salvare solo il transaction log:&lt;br /&gt;
 BACKUP LOG MioDatabase TO DISK = &#039;/backup/MioDatabase_20260611.trn&#039; WITH INIT, FORMAT, COMPRESSION&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per verificare svuotamento del transaction log:&lt;br /&gt;
 SELECT * FROM sys.dm_db_log_space_usage;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Con versioni precedenti alla 2019:&lt;br /&gt;
 DBCC SQLPERF(LOGSPACE);&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Riferimenti: [https://learn.microsoft.com/it-it/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver17]&lt;br /&gt;
&lt;br /&gt;
==ripristino==&lt;br /&gt;
===caso semplice===&lt;br /&gt;
Per leggere il contenuto di un backup, serve eventualmente per modificare i percorsi dei files da restorare&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===con spostamento di percorso===&lt;br /&gt;
 RESTORE FILELISTONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE MioDatabase&lt;br /&gt;
   FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
   WITH RECOVERY,&lt;br /&gt;
   MOVE &#039;MioDatabase_Data&#039; TO &#039;/nuovo_percorso/MioDatabase_Data.mdf&#039;,&lt;br /&gt;
   MOVE &#039;MioDatabase_Log&#039; TO &#039;/nuovo_percorso/MioDatabase_Log.ldf&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
===ripristino da completo, incrementali e transaction log===&lt;br /&gt;
Per restore database e transaction log:&lt;br /&gt;
&lt;br /&gt;
Utile per capire quando è stato eseguito il backup dei log e quale intervallo di tempo copre:&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK=&#039;/backup/MioDB_log_001.trn&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_full.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_incremental.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log01.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
L&#039;ultimo backup del transaction log viene ripristinato con l&#039;opzione &amp;lt;code&amp;gt;recovery&amp;lt;/code&amp;gt;:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per point in time:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with stopat=&#039;2026-06-10T15:30:00&#039;,recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
==post restore==&lt;br /&gt;
&lt;br /&gt;
 SELECT name,state_desc,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
Eventualmente cambiare il compatibility level&lt;br /&gt;
 select name,compatibility_level from sys.databases&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
 alter database MioDatabase set compatibility_level=170&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=snapshot=&lt;br /&gt;
Possibile solo con enterprise Edition e dalla versione 2012.&lt;br /&gt;
&lt;br /&gt;
Creazione snapshot&lt;br /&gt;
 CREATE DATABASE [SCHTCPOS_SS_20261012_110304] ON (NAME = [sofleo_atg_migration_01], FILENAME = &#039;G:\snapshot\SCHTCPOS_SS_20261012_110304_sofleo_atg_migration_01.ss&#039;) AS SNAPSHOT OF [SCHTCPOS];&lt;br /&gt;
&lt;br /&gt;
Restore da snapshot&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET SINGLE_USER WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 RESTORE DATABASE [SCHTCPOS] from database_snapshot=&#039;SCHTCPOS_SS_20261012_110304&#039;;&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET MULTI_USER;&lt;br /&gt;
&lt;br /&gt;
Cancellazione snapshot&lt;br /&gt;
 DROP DATABASE [SCHTCPOS_SS_20261012_110304];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per generare comando di esecuzione snapshot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Script per la generazione dinamica del comando CREATE DATABASE SNAPSHOT&lt;br /&gt;
-- Target directory: G:\snapshot\&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
DECLARE @SourceDB SYSNAME = &#039;TuoNomeDatabase&#039;; -- Sostituisci con il nome del tuo database&lt;br /&gt;
DECLARE @SnapshotName SYSNAME = @SourceDB + &#039;_SS_&#039; + CONVERT(VARCHAR(8), GETDATE(), 112) + &#039;_&#039; + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), &#039;:&#039;, &#039;&#039;);&lt;br /&gt;
DECLARE @SnapshotPath NVARCHAR(512) = N&#039;G:\snapshot\&#039;;&lt;br /&gt;
&lt;br /&gt;
DECLARE @SQL NVARCHAR(MAX) = N&#039;CREATE DATABASE &#039; + QUOTENAME(@SnapshotName) + &#039; ON &#039;;&lt;br /&gt;
&lt;br /&gt;
-- Recupera dinamicamente tutti i file di dati (tipo 0 = Row data) del database sorgente&lt;br /&gt;
SELECT @SQL = @SQL + STUFF((&lt;br /&gt;
    SELECT &lt;br /&gt;
        N&#039;, (NAME = &#039; + QUOTENAME(f.name) + &lt;br /&gt;
        N&#039;, FILENAME = &#039;&#039;&#039; + @SnapshotPath + @SnapshotName + N&#039;_&#039; + f.name + N&#039;.ss&#039;&#039;)&#039;&lt;br /&gt;
    FROM sys.master_files f&lt;br /&gt;
    WHERE f.database_id = DB_ID(@SourceDB)&lt;br /&gt;
      AND f.type = 0 -- Solo file di dati (esclude i file di log)&lt;br /&gt;
    FOR XML PATH(&#039;&#039;), TYPE).value(&#039;.&#039;, &#039;NVARCHAR(MAX)&#039;), 1, 2, N&#039;&#039;) + &lt;br /&gt;
    N&#039; AS SNAPSHOT OF &#039; + QUOTENAME(@SourceDB) + N&#039;;&#039;;&lt;br /&gt;
&lt;br /&gt;
-- Stampa a schermo il comando generato (utile per verifica o log)&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT &#039;Comando generato per lo Snapshot:&#039;;&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT @SQL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=storico backup=&lt;br /&gt;
Interroga gli eventi di backup via VSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    bs.database_name,&lt;br /&gt;
    bs.backup_start_date,&lt;br /&gt;
    bs.backup_finish_date,&lt;br /&gt;
    CASE bs.type &lt;br /&gt;
        WHEN &#039;D&#039; THEN &#039;Full&#039;&lt;br /&gt;
        WHEN &#039;I&#039; THEN &#039;Differential&#039;&lt;br /&gt;
        WHEN &#039;L&#039; THEN &#039;Log&#039;&lt;br /&gt;
    END AS backup_type,&lt;br /&gt;
    bs.is_snapshot,&lt;br /&gt;
    bs.is_copy_only,&lt;br /&gt;
    bs.name AS backup_set_name,&lt;br /&gt;
    bmf.physical_device_name&lt;br /&gt;
FROM msdb.dbo.backupset bs&lt;br /&gt;
JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id&lt;br /&gt;
WHERE (bs.is_snapshot = 1 -- solo backup via snapshot VSS&lt;br /&gt;
   OR bmf.physical_device_name LIKE &#039;{%&#039;) -- I backup VSS generano spesso GUID virtuali come dispositivo&lt;br /&gt;
  AND (bs.backup_start_date between &#039;2026-09-22 01:00:00&#039; and &#039;2026-09-22 05:00:00&#039;)&lt;br /&gt;
ORDER BY bs.backup_start_date DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eventi di snapshot&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O is frozen&#039;;&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O was resumed&#039;;&lt;br /&gt;
 &lt;br /&gt;
Per filtrare per data&lt;br /&gt;
 DECLARE @StartDate DATETIME = &#039;2026-09-25 00:00:00&#039;;&lt;br /&gt;
 DECLARE @EndDate   DATETIME = &#039;2026-09-25 10:00:00&#039;;&lt;br /&gt;
 EXEC sys.xp_readerrorlog &lt;br /&gt;
    0,                      -- Log attuale&lt;br /&gt;
    1,                      -- SQL Server Log&lt;br /&gt;
    N&#039;I/O was resumed&#039;,     -- Testo da cercare&lt;br /&gt;
    NULL,                   -- Secondo testo (opzionale)&lt;br /&gt;
    @StartDate,             -- Data/Ora inizio&lt;br /&gt;
    @EndDate,               -- Data/Ora fine&lt;br /&gt;
    N&#039;DESC&#039;;                -- Ordine di visualizzazione&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:MS SQL Server]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6477</id>
		<title>MSSQL backup e restore</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6477"/>
		<updated>2026-10-14T08:40:26Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* salvataggio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==salvataggio==&lt;br /&gt;
Verificare il Recovery Model del database:&lt;br /&gt;
 SELECT name,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Eventualmente modificarlo:&lt;br /&gt;
 ALTER DATABASE &amp;lt;database_name&amp;gt; SET RECOVERY FULL&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Salvataggio&lt;br /&gt;
 backup database MioDatabase to disk = &#039;/backup/MioDatabase.bak&#039;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per per salvare solo il transaction log:&lt;br /&gt;
 BACKUP LOG MioDatabase TO DISK = &#039;/backup/MioDatabase_20260611.trn&#039; WITH INIT, FORMAT, COMPRESSION&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Salvataggio differenziale&lt;br /&gt;
 BACKUP DATABASE [NomeDatabase]  TO DISK = &#039;C:\Backup\NomeDatabase_diff.bak&#039;  WITH DIFFERENTIAL, INIT, FORMAT, COMPRESSION&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per verificare svuotamento del transaction log:&lt;br /&gt;
 SELECT * FROM sys.dm_db_log_space_usage;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Con versioni precedenti alla 2019:&lt;br /&gt;
 DBCC SQLPERF(LOGSPACE);&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Riferimenti: [https://learn.microsoft.com/it-it/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver17]&lt;br /&gt;
&lt;br /&gt;
==ripristino==&lt;br /&gt;
===caso semplice===&lt;br /&gt;
Per leggere il contenuto di un backup, serve eventualmente per modificare i percorsi dei files da restorare&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===con spostamento di percorso===&lt;br /&gt;
 RESTORE FILELISTONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE MioDatabase&lt;br /&gt;
   FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
   WITH RECOVERY,&lt;br /&gt;
   MOVE &#039;MioDatabase_Data&#039; TO &#039;/nuovo_percorso/MioDatabase_Data.mdf&#039;,&lt;br /&gt;
   MOVE &#039;MioDatabase_Log&#039; TO &#039;/nuovo_percorso/MioDatabase_Log.ldf&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
===ripristino da completo, incrementali e transaction log===&lt;br /&gt;
Per restore database e transaction log:&lt;br /&gt;
&lt;br /&gt;
Utile per capire quando è stato eseguito il backup dei log e quale intervallo di tempo copre:&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK=&#039;/backup/MioDB_log_001.trn&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_full.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_incremental.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log01.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
L&#039;ultimo backup del transaction log viene ripristinato con l&#039;opzione &amp;lt;code&amp;gt;recovery&amp;lt;/code&amp;gt;:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per point in time:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with stopat=&#039;2026-06-10T15:30:00&#039;,recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
==post restore==&lt;br /&gt;
&lt;br /&gt;
 SELECT name,state_desc,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
Eventualmente cambiare il compatibility level&lt;br /&gt;
 select name,compatibility_level from sys.databases&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
 alter database MioDatabase set compatibility_level=170&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=snapshot=&lt;br /&gt;
Possibile solo con enterprise Edition e dalla versione 2012.&lt;br /&gt;
&lt;br /&gt;
Creazione snapshot&lt;br /&gt;
 CREATE DATABASE [SCHTCPOS_SS_20261012_110304] ON (NAME = [sofleo_atg_migration_01], FILENAME = &#039;G:\snapshot\SCHTCPOS_SS_20261012_110304_sofleo_atg_migration_01.ss&#039;) AS SNAPSHOT OF [SCHTCPOS];&lt;br /&gt;
&lt;br /&gt;
Restore da snapshot&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET SINGLE_USER WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 RESTORE DATABASE [SCHTCPOS] from database_snapshot=&#039;SCHTCPOS_SS_20261012_110304&#039;;&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET MULTI_USER;&lt;br /&gt;
&lt;br /&gt;
Cancellazione snapshot&lt;br /&gt;
 DROP DATABASE [SCHTCPOS_SS_20261012_110304];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per generare comando di esecuzione snapshot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Script per la generazione dinamica del comando CREATE DATABASE SNAPSHOT&lt;br /&gt;
-- Target directory: G:\snapshot\&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
DECLARE @SourceDB SYSNAME = &#039;TuoNomeDatabase&#039;; -- Sostituisci con il nome del tuo database&lt;br /&gt;
DECLARE @SnapshotName SYSNAME = @SourceDB + &#039;_SS_&#039; + CONVERT(VARCHAR(8), GETDATE(), 112) + &#039;_&#039; + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), &#039;:&#039;, &#039;&#039;);&lt;br /&gt;
DECLARE @SnapshotPath NVARCHAR(512) = N&#039;G:\snapshot\&#039;;&lt;br /&gt;
&lt;br /&gt;
DECLARE @SQL NVARCHAR(MAX) = N&#039;CREATE DATABASE &#039; + QUOTENAME(@SnapshotName) + &#039; ON &#039;;&lt;br /&gt;
&lt;br /&gt;
-- Recupera dinamicamente tutti i file di dati (tipo 0 = Row data) del database sorgente&lt;br /&gt;
SELECT @SQL = @SQL + STUFF((&lt;br /&gt;
    SELECT &lt;br /&gt;
        N&#039;, (NAME = &#039; + QUOTENAME(f.name) + &lt;br /&gt;
        N&#039;, FILENAME = &#039;&#039;&#039; + @SnapshotPath + @SnapshotName + N&#039;_&#039; + f.name + N&#039;.ss&#039;&#039;)&#039;&lt;br /&gt;
    FROM sys.master_files f&lt;br /&gt;
    WHERE f.database_id = DB_ID(@SourceDB)&lt;br /&gt;
      AND f.type = 0 -- Solo file di dati (esclude i file di log)&lt;br /&gt;
    FOR XML PATH(&#039;&#039;), TYPE).value(&#039;.&#039;, &#039;NVARCHAR(MAX)&#039;), 1, 2, N&#039;&#039;) + &lt;br /&gt;
    N&#039; AS SNAPSHOT OF &#039; + QUOTENAME(@SourceDB) + N&#039;;&#039;;&lt;br /&gt;
&lt;br /&gt;
-- Stampa a schermo il comando generato (utile per verifica o log)&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT &#039;Comando generato per lo Snapshot:&#039;;&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT @SQL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=storico backup=&lt;br /&gt;
Interroga gli eventi di backup via VSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    bs.database_name,&lt;br /&gt;
    bs.backup_start_date,&lt;br /&gt;
    bs.backup_finish_date,&lt;br /&gt;
    CASE bs.type &lt;br /&gt;
        WHEN &#039;D&#039; THEN &#039;Full&#039;&lt;br /&gt;
        WHEN &#039;I&#039; THEN &#039;Differential&#039;&lt;br /&gt;
        WHEN &#039;L&#039; THEN &#039;Log&#039;&lt;br /&gt;
    END AS backup_type,&lt;br /&gt;
    bs.is_snapshot,&lt;br /&gt;
    bs.is_copy_only,&lt;br /&gt;
    bs.name AS backup_set_name,&lt;br /&gt;
    bmf.physical_device_name&lt;br /&gt;
FROM msdb.dbo.backupset bs&lt;br /&gt;
JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id&lt;br /&gt;
WHERE (bs.is_snapshot = 1 -- solo backup via snapshot VSS&lt;br /&gt;
   OR bmf.physical_device_name LIKE &#039;{%&#039;) -- I backup VSS generano spesso GUID virtuali come dispositivo&lt;br /&gt;
  AND (bs.backup_start_date between &#039;2026-09-22 01:00:00&#039; and &#039;2026-09-22 05:00:00&#039;)&lt;br /&gt;
ORDER BY bs.backup_start_date DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eventi di snapshot&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O is frozen&#039;;&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O was resumed&#039;;&lt;br /&gt;
 &lt;br /&gt;
Per filtrare per data&lt;br /&gt;
 DECLARE @StartDate DATETIME = &#039;2026-09-25 00:00:00&#039;;&lt;br /&gt;
 DECLARE @EndDate   DATETIME = &#039;2026-09-25 10:00:00&#039;;&lt;br /&gt;
 EXEC sys.xp_readerrorlog &lt;br /&gt;
    0,                      -- Log attuale&lt;br /&gt;
    1,                      -- SQL Server Log&lt;br /&gt;
    N&#039;I/O was resumed&#039;,     -- Testo da cercare&lt;br /&gt;
    NULL,                   -- Secondo testo (opzionale)&lt;br /&gt;
    @StartDate,             -- Data/Ora inizio&lt;br /&gt;
    @EndDate,               -- Data/Ora fine&lt;br /&gt;
    N&#039;DESC&#039;;                -- Ordine di visualizzazione&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:MS SQL Server]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6476</id>
		<title>MSSQL backup e restore</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6476"/>
		<updated>2026-10-12T10:19:42Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* snapshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==salvataggio==&lt;br /&gt;
Verificare il Recovery Model del database:&lt;br /&gt;
 SELECT name,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Eventualmente modificarlo:&lt;br /&gt;
 ALTER DATABASE &amp;lt;database_name&amp;gt; SET RECOVERY FULL&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Salvataggio&lt;br /&gt;
 backup database MioDatabase to disk = &#039;/backup/MioDatabase.bak&#039;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per per salvare solo il transaction log:&lt;br /&gt;
 BACKUP LOG MioDatabase TO DISK = &#039;/backup/MioDatabase_20260611.trn&#039; WITH INIT, FORMAT, COMPRESSION&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per verificare svuotamento del transaction log:&lt;br /&gt;
 SELECT * FROM sys.dm_db_log_space_usage;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Con versioni precedenti alla 2019:&lt;br /&gt;
 DBCC SQLPERF(LOGSPACE);&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Riferimenti: [https://learn.microsoft.com/it-it/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver17]&lt;br /&gt;
&lt;br /&gt;
==ripristino==&lt;br /&gt;
===caso semplice===&lt;br /&gt;
Per leggere il contenuto di un backup, serve eventualmente per modificare i percorsi dei files da restorare&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===con spostamento di percorso===&lt;br /&gt;
 RESTORE FILELISTONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE MioDatabase&lt;br /&gt;
   FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
   WITH RECOVERY,&lt;br /&gt;
   MOVE &#039;MioDatabase_Data&#039; TO &#039;/nuovo_percorso/MioDatabase_Data.mdf&#039;,&lt;br /&gt;
   MOVE &#039;MioDatabase_Log&#039; TO &#039;/nuovo_percorso/MioDatabase_Log.ldf&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
===ripristino da completo, incrementali e transaction log===&lt;br /&gt;
Per restore database e transaction log:&lt;br /&gt;
&lt;br /&gt;
Utile per capire quando è stato eseguito il backup dei log e quale intervallo di tempo copre:&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK=&#039;/backup/MioDB_log_001.trn&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_full.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_incremental.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log01.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
L&#039;ultimo backup del transaction log viene ripristinato con l&#039;opzione &amp;lt;code&amp;gt;recovery&amp;lt;/code&amp;gt;:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per point in time:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with stopat=&#039;2026-06-10T15:30:00&#039;,recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
==post restore==&lt;br /&gt;
&lt;br /&gt;
 SELECT name,state_desc,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
Eventualmente cambiare il compatibility level&lt;br /&gt;
 select name,compatibility_level from sys.databases&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
 alter database MioDatabase set compatibility_level=170&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=snapshot=&lt;br /&gt;
Possibile solo con enterprise Edition e dalla versione 2012.&lt;br /&gt;
&lt;br /&gt;
Creazione snapshot&lt;br /&gt;
 CREATE DATABASE [SCHTCPOS_SS_20261012_110304] ON (NAME = [sofleo_atg_migration_01], FILENAME = &#039;G:\snapshot\SCHTCPOS_SS_20261012_110304_sofleo_atg_migration_01.ss&#039;) AS SNAPSHOT OF [SCHTCPOS];&lt;br /&gt;
&lt;br /&gt;
Restore da snapshot&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET SINGLE_USER WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 RESTORE DATABASE [SCHTCPOS] from database_snapshot=&#039;SCHTCPOS_SS_20261012_110304&#039;;&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET MULTI_USER;&lt;br /&gt;
&lt;br /&gt;
Cancellazione snapshot&lt;br /&gt;
 DROP DATABASE [SCHTCPOS_SS_20261012_110304];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per generare comando di esecuzione snapshot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Script per la generazione dinamica del comando CREATE DATABASE SNAPSHOT&lt;br /&gt;
-- Target directory: G:\snapshot\&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
DECLARE @SourceDB SYSNAME = &#039;TuoNomeDatabase&#039;; -- Sostituisci con il nome del tuo database&lt;br /&gt;
DECLARE @SnapshotName SYSNAME = @SourceDB + &#039;_SS_&#039; + CONVERT(VARCHAR(8), GETDATE(), 112) + &#039;_&#039; + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), &#039;:&#039;, &#039;&#039;);&lt;br /&gt;
DECLARE @SnapshotPath NVARCHAR(512) = N&#039;G:\snapshot\&#039;;&lt;br /&gt;
&lt;br /&gt;
DECLARE @SQL NVARCHAR(MAX) = N&#039;CREATE DATABASE &#039; + QUOTENAME(@SnapshotName) + &#039; ON &#039;;&lt;br /&gt;
&lt;br /&gt;
-- Recupera dinamicamente tutti i file di dati (tipo 0 = Row data) del database sorgente&lt;br /&gt;
SELECT @SQL = @SQL + STUFF((&lt;br /&gt;
    SELECT &lt;br /&gt;
        N&#039;, (NAME = &#039; + QUOTENAME(f.name) + &lt;br /&gt;
        N&#039;, FILENAME = &#039;&#039;&#039; + @SnapshotPath + @SnapshotName + N&#039;_&#039; + f.name + N&#039;.ss&#039;&#039;)&#039;&lt;br /&gt;
    FROM sys.master_files f&lt;br /&gt;
    WHERE f.database_id = DB_ID(@SourceDB)&lt;br /&gt;
      AND f.type = 0 -- Solo file di dati (esclude i file di log)&lt;br /&gt;
    FOR XML PATH(&#039;&#039;), TYPE).value(&#039;.&#039;, &#039;NVARCHAR(MAX)&#039;), 1, 2, N&#039;&#039;) + &lt;br /&gt;
    N&#039; AS SNAPSHOT OF &#039; + QUOTENAME(@SourceDB) + N&#039;;&#039;;&lt;br /&gt;
&lt;br /&gt;
-- Stampa a schermo il comando generato (utile per verifica o log)&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT &#039;Comando generato per lo Snapshot:&#039;;&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT @SQL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=storico backup=&lt;br /&gt;
Interroga gli eventi di backup via VSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    bs.database_name,&lt;br /&gt;
    bs.backup_start_date,&lt;br /&gt;
    bs.backup_finish_date,&lt;br /&gt;
    CASE bs.type &lt;br /&gt;
        WHEN &#039;D&#039; THEN &#039;Full&#039;&lt;br /&gt;
        WHEN &#039;I&#039; THEN &#039;Differential&#039;&lt;br /&gt;
        WHEN &#039;L&#039; THEN &#039;Log&#039;&lt;br /&gt;
    END AS backup_type,&lt;br /&gt;
    bs.is_snapshot,&lt;br /&gt;
    bs.is_copy_only,&lt;br /&gt;
    bs.name AS backup_set_name,&lt;br /&gt;
    bmf.physical_device_name&lt;br /&gt;
FROM msdb.dbo.backupset bs&lt;br /&gt;
JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id&lt;br /&gt;
WHERE (bs.is_snapshot = 1 -- solo backup via snapshot VSS&lt;br /&gt;
   OR bmf.physical_device_name LIKE &#039;{%&#039;) -- I backup VSS generano spesso GUID virtuali come dispositivo&lt;br /&gt;
  AND (bs.backup_start_date between &#039;2026-09-22 01:00:00&#039; and &#039;2026-09-22 05:00:00&#039;)&lt;br /&gt;
ORDER BY bs.backup_start_date DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eventi di snapshot&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O is frozen&#039;;&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O was resumed&#039;;&lt;br /&gt;
 &lt;br /&gt;
Per filtrare per data&lt;br /&gt;
 DECLARE @StartDate DATETIME = &#039;2026-09-25 00:00:00&#039;;&lt;br /&gt;
 DECLARE @EndDate   DATETIME = &#039;2026-09-25 10:00:00&#039;;&lt;br /&gt;
 EXEC sys.xp_readerrorlog &lt;br /&gt;
    0,                      -- Log attuale&lt;br /&gt;
    1,                      -- SQL Server Log&lt;br /&gt;
    N&#039;I/O was resumed&#039;,     -- Testo da cercare&lt;br /&gt;
    NULL,                   -- Secondo testo (opzionale)&lt;br /&gt;
    @StartDate,             -- Data/Ora inizio&lt;br /&gt;
    @EndDate,               -- Data/Ora fine&lt;br /&gt;
    N&#039;DESC&#039;;                -- Ordine di visualizzazione&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:MS SQL Server]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6475</id>
		<title>MSSQL backup e restore</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=MSSQL_backup_e_restore&amp;diff=6475"/>
		<updated>2026-10-12T10:19:04Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* storico backup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==salvataggio==&lt;br /&gt;
Verificare il Recovery Model del database:&lt;br /&gt;
 SELECT name,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Eventualmente modificarlo:&lt;br /&gt;
 ALTER DATABASE &amp;lt;database_name&amp;gt; SET RECOVERY FULL&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Salvataggio&lt;br /&gt;
 backup database MioDatabase to disk = &#039;/backup/MioDatabase.bak&#039;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per per salvare solo il transaction log:&lt;br /&gt;
 BACKUP LOG MioDatabase TO DISK = &#039;/backup/MioDatabase_20260611.trn&#039; WITH INIT, FORMAT, COMPRESSION&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per verificare svuotamento del transaction log:&lt;br /&gt;
 SELECT * FROM sys.dm_db_log_space_usage;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Con versioni precedenti alla 2019:&lt;br /&gt;
 DBCC SQLPERF(LOGSPACE);&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Riferimenti: [https://learn.microsoft.com/it-it/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver17]&lt;br /&gt;
&lt;br /&gt;
==ripristino==&lt;br /&gt;
===caso semplice===&lt;br /&gt;
Per leggere il contenuto di un backup, serve eventualmente per modificare i percorsi dei files da restorare&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===con spostamento di percorso===&lt;br /&gt;
 RESTORE FILELISTONLY FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
&lt;br /&gt;
 RESTORE DATABASE MioDatabase&lt;br /&gt;
   FROM DISK = &#039;/backup/MioDatabase.bak&#039;;&lt;br /&gt;
   WITH RECOVERY,&lt;br /&gt;
   MOVE &#039;MioDatabase_Data&#039; TO &#039;/nuovo_percorso/MioDatabase_Data.mdf&#039;,&lt;br /&gt;
   MOVE &#039;MioDatabase_Log&#039; TO &#039;/nuovo_percorso/MioDatabase_Log.ldf&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
===ripristino da completo, incrementali e transaction log===&lt;br /&gt;
Per restore database e transaction log:&lt;br /&gt;
&lt;br /&gt;
Utile per capire quando è stato eseguito il backup dei log e quale intervallo di tempo copre:&lt;br /&gt;
 RESTORE HEADERONLY FROM DISK=&#039;/backup/MioDB_log_001.trn&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_full.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore database MioDatabase from disk = &#039;/backup/MioDatabase_incremental.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log01.bak&#039; with norecovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
L&#039;ultimo backup del transaction log viene ripristinato con l&#039;opzione &amp;lt;code&amp;gt;recovery&amp;lt;/code&amp;gt;:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
Per point in time:&lt;br /&gt;
 restore log MioDatabase from disk = &#039;/backup/MioDatabase_log02.bak&#039; with stopat=&#039;2026-06-10T15:30:00&#039;,recovery&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
==post restore==&lt;br /&gt;
&lt;br /&gt;
 SELECT name,state_desc,recovery_model_desc FROM sys.databases WHERE name = &#039;MioDatabase&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
Eventualmente cambiare il compatibility level&lt;br /&gt;
 select name,compatibility_level from sys.databases&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
 alter database MioDatabase set compatibility_level=170&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=snapshot=&lt;br /&gt;
Possibile solo con enterprise Edition e dalla versione 2012.&lt;br /&gt;
&lt;br /&gt;
Creazione snapshot&lt;br /&gt;
 CREATE DATABASE [SCHTCPOS_SS_20261012_110304] ON (NAME = [sofleo_atg_migration_01], FILENAME = &#039;G:\snapshot\SCHTCPOS_SS_20261012_110304_sofleo_atg_migration_01.ss&#039;) AS SNAPSHOT OF [SCHTCPOS];&lt;br /&gt;
&lt;br /&gt;
Restore da snapshot&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET SINGLE_USER WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 RESTORE DATABASE [SCHTCPOS] from database_snapshot=&#039;SCHTCPOS_SS_20261012_110304&#039;;&lt;br /&gt;
 ALTER DATABASE SCHTCPOS SET MULTI_USER;&lt;br /&gt;
&lt;br /&gt;
Cancellazione snapshot&lt;br /&gt;
 DROP DATABASE [SCHTCPOS_SS_20261012_110304];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Script per la generazione dinamica del comando CREATE DATABASE SNAPSHOT&lt;br /&gt;
-- Target directory: G:\snapshot\&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
DECLARE @SourceDB SYSNAME = &#039;TuoNomeDatabase&#039;; -- Sostituisci con il nome del tuo database&lt;br /&gt;
DECLARE @SnapshotName SYSNAME = @SourceDB + &#039;_SS_&#039; + CONVERT(VARCHAR(8), GETDATE(), 112) + &#039;_&#039; + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), &#039;:&#039;, &#039;&#039;);&lt;br /&gt;
DECLARE @SnapshotPath NVARCHAR(512) = N&#039;G:\snapshot\&#039;;&lt;br /&gt;
&lt;br /&gt;
DECLARE @SQL NVARCHAR(MAX) = N&#039;CREATE DATABASE &#039; + QUOTENAME(@SnapshotName) + &#039; ON &#039;;&lt;br /&gt;
&lt;br /&gt;
-- Recupera dinamicamente tutti i file di dati (tipo 0 = Row data) del database sorgente&lt;br /&gt;
SELECT @SQL = @SQL + STUFF((&lt;br /&gt;
    SELECT &lt;br /&gt;
        N&#039;, (NAME = &#039; + QUOTENAME(f.name) + &lt;br /&gt;
        N&#039;, FILENAME = &#039;&#039;&#039; + @SnapshotPath + @SnapshotName + N&#039;_&#039; + f.name + N&#039;.ss&#039;&#039;)&#039;&lt;br /&gt;
    FROM sys.master_files f&lt;br /&gt;
    WHERE f.database_id = DB_ID(@SourceDB)&lt;br /&gt;
      AND f.type = 0 -- Solo file di dati (esclude i file di log)&lt;br /&gt;
    FOR XML PATH(&#039;&#039;), TYPE).value(&#039;.&#039;, &#039;NVARCHAR(MAX)&#039;), 1, 2, N&#039;&#039;) + &lt;br /&gt;
    N&#039; AS SNAPSHOT OF &#039; + QUOTENAME(@SourceDB) + N&#039;;&#039;;&lt;br /&gt;
&lt;br /&gt;
-- Stampa a schermo il comando generato (utile per verifica o log)&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT &#039;Comando generato per lo Snapshot:&#039;;&lt;br /&gt;
PRINT &#039;------------------------------------------------------------&#039;;&lt;br /&gt;
PRINT @SQL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=storico backup=&lt;br /&gt;
Interroga gli eventi di backup via VSS&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    bs.database_name,&lt;br /&gt;
    bs.backup_start_date,&lt;br /&gt;
    bs.backup_finish_date,&lt;br /&gt;
    CASE bs.type &lt;br /&gt;
        WHEN &#039;D&#039; THEN &#039;Full&#039;&lt;br /&gt;
        WHEN &#039;I&#039; THEN &#039;Differential&#039;&lt;br /&gt;
        WHEN &#039;L&#039; THEN &#039;Log&#039;&lt;br /&gt;
    END AS backup_type,&lt;br /&gt;
    bs.is_snapshot,&lt;br /&gt;
    bs.is_copy_only,&lt;br /&gt;
    bs.name AS backup_set_name,&lt;br /&gt;
    bmf.physical_device_name&lt;br /&gt;
FROM msdb.dbo.backupset bs&lt;br /&gt;
JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id&lt;br /&gt;
WHERE (bs.is_snapshot = 1 -- solo backup via snapshot VSS&lt;br /&gt;
   OR bmf.physical_device_name LIKE &#039;{%&#039;) -- I backup VSS generano spesso GUID virtuali come dispositivo&lt;br /&gt;
  AND (bs.backup_start_date between &#039;2026-09-22 01:00:00&#039; and &#039;2026-09-22 05:00:00&#039;)&lt;br /&gt;
ORDER BY bs.backup_start_date DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eventi di snapshot&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O is frozen&#039;;&lt;br /&gt;
&lt;br /&gt;
 EXEC sp_readerrorlog 0, 1, &#039;I/O was resumed&#039;;&lt;br /&gt;
 &lt;br /&gt;
Per filtrare per data&lt;br /&gt;
 DECLARE @StartDate DATETIME = &#039;2026-09-25 00:00:00&#039;;&lt;br /&gt;
 DECLARE @EndDate   DATETIME = &#039;2026-09-25 10:00:00&#039;;&lt;br /&gt;
 EXEC sys.xp_readerrorlog &lt;br /&gt;
    0,                      -- Log attuale&lt;br /&gt;
    1,                      -- SQL Server Log&lt;br /&gt;
    N&#039;I/O was resumed&#039;,     -- Testo da cercare&lt;br /&gt;
    NULL,                   -- Secondo testo (opzionale)&lt;br /&gt;
    @StartDate,             -- Data/Ora inizio&lt;br /&gt;
    @EndDate,               -- Data/Ora fine&lt;br /&gt;
    N&#039;DESC&#039;;                -- Ordine di visualizzazione&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:MS SQL Server]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6474</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6474"/>
		<updated>2026-10-06T23:22:20Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter database tempfile &#039; || file_id || &#039; autoextend on next 128M;&#039; from dba_temp_files where autoextensible=&#039;NO&#039; and tablespace_name=&#039;TEMPNEW2&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter database tempfile &#039; || file_id || &#039; resize 8M;&#039; from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes;&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
Tablespace map&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name=&#039;&amp;amp;1&#039; group by owner,segment_type order by 1,2;&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 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;&lt;br /&gt;
&lt;br /&gt;
=Segment Advisor=&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
Per eseguire lo shrink delle tabelle:&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set verify off echo off&lt;br /&gt;
 alter table &amp;amp;1 enable row movement;&lt;br /&gt;
 -- non mette lock esclusivo ma non libera lo spazio&lt;br /&gt;
 alter table &amp;amp;1 shrink space compact;&lt;br /&gt;
 -- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine&lt;br /&gt;
 alter table &amp;amp;1 shrink space;         &lt;br /&gt;
 alter table &amp;amp;1 disable row movement;&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6473</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6473"/>
		<updated>2026-10-05T15:38:19Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* rimettere in logging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
Ordinati per grandezza&lt;br /&gt;
 select &#039;/* size &#039; || s.bytes/(1024*1024) || &#039; table &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;/* &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
versione con inner join&lt;br /&gt;
 select &#039;/* &#039; || i.table_owner || &#039;.&#039; || i.table_name || &#039; &#039; || t.logging || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039;&lt;br /&gt;
  from dba_indexes i&lt;br /&gt;
  inner join dba_users u on (u.username=i.owner and u.oracle_maintained=&#039;N&#039;)&lt;br /&gt;
  inner join dba_tables t on (t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;YES&#039;)&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6472</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6472"/>
		<updated>2026-10-05T15:37:04Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* rimettere in logging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
Ordinati per grandezza&lt;br /&gt;
 select &#039;/* size &#039; || s.bytes/(1024*1024) || &#039; table &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;/* &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
versione con inner join&lt;br /&gt;
 select &#039;/* &#039; || i.table_name || &#039; &#039; || t.logging || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039;&lt;br /&gt;
  from dba_indexes i&lt;br /&gt;
  inner join dba_users u on (u.username=i.owner and u.oracle_maintained=&#039;N&#039;)&lt;br /&gt;
  inner join dba_tables t on (t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;YES&#039;)&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6471</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6471"/>
		<updated>2026-10-05T15:31:08Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* rimettere in logging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
Ordinati per grandezza&lt;br /&gt;
 select &#039;/* size &#039; || s.bytes/(1024*1024) || &#039; table &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;/* &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6470</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6470"/>
		<updated>2026-10-05T13:51:29Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Autoextend tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter database tempfile &#039; || file_id || &#039; autoextend on next 128M;&#039; from dba_temp_files where autoextensible=&#039;NO&#039; and tablespace_name=&#039;TEMPNEW2&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
Tablespace map&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name=&#039;&amp;amp;1&#039; group by owner,segment_type order by 1,2;&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 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;&lt;br /&gt;
&lt;br /&gt;
=Segment Advisor=&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
Per eseguire lo shrink delle tabelle:&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set verify off echo off&lt;br /&gt;
 alter table &amp;amp;1 enable row movement;&lt;br /&gt;
 -- non mette lock esclusivo ma non libera lo spazio&lt;br /&gt;
 alter table &amp;amp;1 shrink space compact;&lt;br /&gt;
 -- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine&lt;br /&gt;
 alter table &amp;amp;1 shrink space;         &lt;br /&gt;
 alter table &amp;amp;1 disable row movement;&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6469</id>
		<title>Oracle Indici</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6469"/>
		<updated>2026-10-05T13:30:25Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* indici nosegment (virtual indexes) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Indici=&lt;br /&gt;
==Elenco Indici==&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 140&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col pos for 99&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col index_name for a35&lt;br /&gt;
 select table_owner || &#039;.&#039; || table_name table_name, index_owner || &#039;.&#039; || index_name index_name, column_name, column_position pos&lt;br /&gt;
  from dba_ind_columns&lt;br /&gt;
  where table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
  order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 150&lt;br /&gt;
set autotrace off&lt;br /&gt;
col column_name for a30&lt;br /&gt;
col pos for 99&lt;br /&gt;
col table_name for a38&lt;br /&gt;
col index_name for a43&lt;br /&gt;
col tbs for a20&lt;br /&gt;
select c.table_owner || &#039;.&#039; || c.table_name table_name, c.index_owner || &#039;.&#039; || c.index_name || &#039; &#039; || i.generated index_name,&lt;br /&gt;
       substr(i.uniqueness,1,1) U, c.column_name, c.column_position pos, i.tablespace_name tbs&lt;br /&gt;
from dba_ind_columns c&lt;br /&gt;
 inner join dba_indexes i on &lt;br /&gt;
 (c.table_owner=i.table_owner and c.table_name=i.table_name and&lt;br /&gt;
  c.index_owner=i.owner and c.index_name=i.index_name)&lt;br /&gt;
where c.table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
col owner for a40&lt;br /&gt;
col tablespace_name for a40&lt;br /&gt;
select owner,tablespace_name,bytes/(1024*1024) mb from dba_segments where segment_name=upper(&#039;&amp;amp;&amp;amp;1&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indici con proprietario diverso==&lt;br /&gt;
 select owner,index_name,table_owner,table_name from dba_indexes where table_owner!=owner;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=indici nosegment (virtual indexes)=&lt;br /&gt;
 create index cust_idx1 on cust(first_name) nosegment;&lt;br /&gt;
&lt;br /&gt;
Per fare in modo che l&#039;optimizer valuti correttamente se usare o meno l&#039;indice, si possono calcolare le statistiche:&lt;br /&gt;
 EXEC DBMS_STATS.gather_index_stats(ownname=&amp;gt;&#039;USER&#039;, indname =&amp;gt;&#039;CUST_IDX1&#039;);&lt;br /&gt;
&lt;br /&gt;
Per vedere se usa l&#039;indice, anche se (di fatto) non esiste:&lt;br /&gt;
 set autotrace traceonly explain;&lt;br /&gt;
 alter session set &amp;quot;_use_nosegment_indexes&amp;quot;=true;&lt;br /&gt;
 select first_name from cust where first_name = &#039;BUBBA&#039;;&lt;br /&gt;
&lt;br /&gt;
Se viene usato, si può creare un &amp;quot;vero&amp;quot; indice.&lt;br /&gt;
Per trasformarlo in un indice &amp;quot;vero&amp;quot;:&lt;br /&gt;
 create index cust_idx1 on cust(first_name);&lt;br /&gt;
&lt;br /&gt;
=indici compress=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6468</id>
		<title>Oracle Indici</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6468"/>
		<updated>2026-10-05T13:26:23Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* indici nosegment (virtual indexes) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Indici=&lt;br /&gt;
==Elenco Indici==&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 140&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col pos for 99&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col index_name for a35&lt;br /&gt;
 select table_owner || &#039;.&#039; || table_name table_name, index_owner || &#039;.&#039; || index_name index_name, column_name, column_position pos&lt;br /&gt;
  from dba_ind_columns&lt;br /&gt;
  where table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
  order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 150&lt;br /&gt;
set autotrace off&lt;br /&gt;
col column_name for a30&lt;br /&gt;
col pos for 99&lt;br /&gt;
col table_name for a38&lt;br /&gt;
col index_name for a43&lt;br /&gt;
col tbs for a20&lt;br /&gt;
select c.table_owner || &#039;.&#039; || c.table_name table_name, c.index_owner || &#039;.&#039; || c.index_name || &#039; &#039; || i.generated index_name,&lt;br /&gt;
       substr(i.uniqueness,1,1) U, c.column_name, c.column_position pos, i.tablespace_name tbs&lt;br /&gt;
from dba_ind_columns c&lt;br /&gt;
 inner join dba_indexes i on &lt;br /&gt;
 (c.table_owner=i.table_owner and c.table_name=i.table_name and&lt;br /&gt;
  c.index_owner=i.owner and c.index_name=i.index_name)&lt;br /&gt;
where c.table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
col owner for a40&lt;br /&gt;
col tablespace_name for a40&lt;br /&gt;
select owner,tablespace_name,bytes/(1024*1024) mb from dba_segments where segment_name=upper(&#039;&amp;amp;&amp;amp;1&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indici con proprietario diverso==&lt;br /&gt;
 select owner,index_name,table_owner,table_name from dba_indexes where table_owner!=owner;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=indici nosegment (virtual indexes)=&lt;br /&gt;
 create index cust_idx1 on cust(first_name) nosegment;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per vedere se usa l&#039;indice, anche se (di fatto) non esiste:&lt;br /&gt;
 set autotrace traceonly explain;&lt;br /&gt;
 alter session set &amp;quot;_use_nosegment_indexes&amp;quot;=true;&lt;br /&gt;
 select first_name from cust where first_name = &#039;BUBBA&#039;;&lt;br /&gt;
&lt;br /&gt;
Se viene usato, si può creare un &amp;quot;vero&amp;quot; indice.&lt;br /&gt;
Per trasformarlo in un indice &amp;quot;vero&amp;quot;:&lt;br /&gt;
 create index cust_idx1 on cust(first_name);&lt;br /&gt;
&lt;br /&gt;
=indici compress=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6467</id>
		<title>Oracle Indici</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6467"/>
		<updated>2026-10-05T13:23:40Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* indici nosegment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Indici=&lt;br /&gt;
==Elenco Indici==&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 140&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col pos for 99&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col index_name for a35&lt;br /&gt;
 select table_owner || &#039;.&#039; || table_name table_name, index_owner || &#039;.&#039; || index_name index_name, column_name, column_position pos&lt;br /&gt;
  from dba_ind_columns&lt;br /&gt;
  where table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
  order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 150&lt;br /&gt;
set autotrace off&lt;br /&gt;
col column_name for a30&lt;br /&gt;
col pos for 99&lt;br /&gt;
col table_name for a38&lt;br /&gt;
col index_name for a43&lt;br /&gt;
col tbs for a20&lt;br /&gt;
select c.table_owner || &#039;.&#039; || c.table_name table_name, c.index_owner || &#039;.&#039; || c.index_name || &#039; &#039; || i.generated index_name,&lt;br /&gt;
       substr(i.uniqueness,1,1) U, c.column_name, c.column_position pos, i.tablespace_name tbs&lt;br /&gt;
from dba_ind_columns c&lt;br /&gt;
 inner join dba_indexes i on &lt;br /&gt;
 (c.table_owner=i.table_owner and c.table_name=i.table_name and&lt;br /&gt;
  c.index_owner=i.owner and c.index_name=i.index_name)&lt;br /&gt;
where c.table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
col owner for a40&lt;br /&gt;
col tablespace_name for a40&lt;br /&gt;
select owner,tablespace_name,bytes/(1024*1024) mb from dba_segments where segment_name=upper(&#039;&amp;amp;&amp;amp;1&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indici con proprietario diverso==&lt;br /&gt;
 select owner,index_name,table_owner,table_name from dba_indexes where table_owner!=owner;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=indici nosegment (virtual indexes)=&lt;br /&gt;
 create index cust_idx1 on cust(first_name) nosegment;&lt;br /&gt;
&lt;br /&gt;
 alter session set &amp;quot;_use_nosegment_indexes&amp;quot;=true;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per vedere se usa l&#039;indice, anche se (di fatto) non esiste:&lt;br /&gt;
 set autotrace traceonly explain;&lt;br /&gt;
 select first_name from cust where first_name = &#039;BUBBA&#039;;&lt;br /&gt;
&lt;br /&gt;
=indici compress=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6466</id>
		<title>Oracle Indici</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Indici&amp;diff=6466"/>
		<updated>2026-10-05T12:53:01Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Elenco Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Indici=&lt;br /&gt;
==Elenco Indici==&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 140&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col pos for 99&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col index_name for a35&lt;br /&gt;
 select table_owner || &#039;.&#039; || table_name table_name, index_owner || &#039;.&#039; || index_name index_name, column_name, column_position pos&lt;br /&gt;
  from dba_ind_columns&lt;br /&gt;
  where table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
  order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 150&lt;br /&gt;
set autotrace off&lt;br /&gt;
col column_name for a30&lt;br /&gt;
col pos for 99&lt;br /&gt;
col table_name for a38&lt;br /&gt;
col index_name for a43&lt;br /&gt;
col tbs for a20&lt;br /&gt;
select c.table_owner || &#039;.&#039; || c.table_name table_name, c.index_owner || &#039;.&#039; || c.index_name || &#039; &#039; || i.generated index_name,&lt;br /&gt;
       substr(i.uniqueness,1,1) U, c.column_name, c.column_position pos, i.tablespace_name tbs&lt;br /&gt;
from dba_ind_columns c&lt;br /&gt;
 inner join dba_indexes i on &lt;br /&gt;
 (c.table_owner=i.table_owner and c.table_name=i.table_name and&lt;br /&gt;
  c.index_owner=i.owner and c.index_name=i.index_name)&lt;br /&gt;
where c.table_name=upper(&#039;&amp;amp;&amp;amp;1&#039;)&lt;br /&gt;
order by 1,2,4;&lt;br /&gt;
&lt;br /&gt;
col owner for a40&lt;br /&gt;
col tablespace_name for a40&lt;br /&gt;
select owner,tablespace_name,bytes/(1024*1024) mb from dba_segments where segment_name=upper(&#039;&amp;amp;&amp;amp;1&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Indici con proprietario diverso==&lt;br /&gt;
 select owner,index_name,table_owner,table_name from dba_indexes where table_owner!=owner;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=indici nosegment=&lt;br /&gt;
 create index cust_idx1 on cust(first_name) nosegment;&lt;br /&gt;
&lt;br /&gt;
 alter session set &amp;quot;_use_nosegment_indexes&amp;quot;=true;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per vedere se usa l&#039;indice, anche se (di fatto) non esiste:&lt;br /&gt;
 set autotrace traceonly explain;&lt;br /&gt;
 select first_name from cust where first_name = &#039;BUBBA&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=indici compress=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6465</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6465"/>
		<updated>2026-10-01T07:01:58Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* segment Advisor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
Ordinati per grandezza&lt;br /&gt;
 select &#039;/* size &#039; || s.bytes/(1024*1024) || &#039; table &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=MSSQL_varie&amp;diff=6464</id>
		<title>MSSQL varie</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=MSSQL_varie&amp;diff=6464"/>
		<updated>2026-10-01T06:45:31Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* sessioni bloccate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==porta in ascolto==&lt;br /&gt;
 SELECT * FROM sys.dm_server_registry WHERE value_name = &#039;TcpPort&#039; OR value_name = &#039;TcpDynamicPorts&#039;;&lt;br /&gt;
&lt;br /&gt;
==ricalcolo statistiche per database==&lt;br /&gt;
 use MioDB&lt;br /&gt;
 go&lt;br /&gt;
 EXEC sp_updatestats;&lt;br /&gt;
 go&lt;br /&gt;
&lt;br /&gt;
==Elenco files e spazio occupato==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 SELECT &lt;br /&gt;
    d.name AS DatabaseName,&lt;br /&gt;
    f.name AS LogicalFileName,&lt;br /&gt;
    f.physical_name AS PhysicalFilePath,&lt;br /&gt;
    f.type_desc AS FileType,&lt;br /&gt;
    cast(f.size*8.0/1024.0 as float) mb,&lt;br /&gt;
    f.max_size,&lt;br /&gt;
    f.growth&lt;br /&gt;
 FROM &lt;br /&gt;
    sys.master_files AS f&lt;br /&gt;
 INNER JOIN &lt;br /&gt;
    sys.databases AS d ON f.database_id = d.database_id&lt;br /&gt;
    order by f.type_desc,f.size;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select type_desc,cast(sum(size)*(8.0/1024) as float) as mb,count(*) as num from sys.master_files group by type_desc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==shrink datafiles e log==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==spostamento datafiles==&lt;br /&gt;
===metodo detach attach===&lt;br /&gt;
Metti offline il database&lt;br /&gt;
 ALTER DATABASE MioDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 GO&lt;br /&gt;
 EXEC sp_detach_db &#039;MioDB&#039;;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
Copia o sposta i file verso il nuovo percorso.&lt;br /&gt;
&lt;br /&gt;
Riattacca il database:&lt;br /&gt;
 CREATE DATABASE MioDB&lt;br /&gt;
 ON&lt;br /&gt;
 (&lt;br /&gt;
    FILENAME=&#039;/nuovo_storage/MioDB.mdf&#039;&lt;br /&gt;
 ),&lt;br /&gt;
 (&lt;br /&gt;
    FILENAME=&#039;/nuovo_storage/MioDB_log.ldf&#039;&lt;br /&gt;
 )&lt;br /&gt;
 FOR ATTACH;&lt;br /&gt;
 GO&lt;br /&gt;
&lt;br /&gt;
===metodo rename file===&lt;br /&gt;
* elencare files e percorsi:&lt;br /&gt;
 SELECT name,physical_name,state_desc&lt;br /&gt;
 FROM sys.master_files&lt;br /&gt;
 WHERE database_id = DB_ID(N&#039;MioDB&#039;);&lt;br /&gt;
* Mettere offline il database:&lt;br /&gt;
 ALTER DATABASE MioDb SET OFFLINE;&lt;br /&gt;
 GO&lt;br /&gt;
Se serve forzare transazioni in corso: &lt;br /&gt;
 ALTER DATABASE MioDB SET OFFLINE WITH ROLLBACK IMMEDIATE;&lt;br /&gt;
 GO&lt;br /&gt;
* Spostare o copiare i datafile&lt;br /&gt;
 mv /vecchio_percorso/miodb01.mdf /nuovo_percorso/&lt;br /&gt;
 mv /vecchio_percorso/miodb01_log.ldf /nuovo_percorso/&lt;br /&gt;
* rinominare i files nel DB&lt;br /&gt;
 ALTER DATABASE MioDB MODIFY FILE (NAME = MioDB_DATA, FILENAME = &#039;/nuovo_percorso/miodb01.mdf&#039;);&lt;br /&gt;
 GO&lt;br /&gt;
  ALTER DATABASE MioDB MODIFY FILE (NAME = MioDB_LOG, FILENAME = &#039;/nuovo_percorso/miodb01_log.ldf&#039;);&lt;br /&gt;
 GO&lt;br /&gt;
* rimettere online il DB&lt;br /&gt;
 ALTER DATABASE MioDB  SET ONLINE;&lt;br /&gt;
 GO&lt;br /&gt;
===metodo online===&lt;br /&gt;
* aggiungi un nuovo file&lt;br /&gt;
 ALTER DATABASE NomeDatabase &lt;br /&gt;
 ADD FILE ( &lt;br /&gt;
    NAME = &#039;NomeNuovoFile&#039;, &lt;br /&gt;
    FILENAME = &#039;D:\NuovoPercorso\NomeNuovoFile.ndf&#039;, &lt;br /&gt;
    SIZE = 100MB, &lt;br /&gt;
    FILEGROWTH = 100MB &lt;br /&gt;
 );&lt;br /&gt;
* sposta i dati tutti nel nuovo file&lt;br /&gt;
 DBCC SHRINKFILE (&#039;NomeVecchioFile&#039;, EMPTYFILE);&lt;br /&gt;
* rimuovi il vecchio file&lt;br /&gt;
 ALTER DATABASE NomeDatabase REMOVE FILE NomeVecchioFile;&lt;br /&gt;
&lt;br /&gt;
=Sessioni=&lt;br /&gt;
==sessioni attive=&lt;br /&gt;
 SELECT &lt;br /&gt;
    s.session_id AS [SPID],&lt;br /&gt;
    s.login_name AS [Login],&lt;br /&gt;
    s.host_name AS [Host],&lt;br /&gt;
    s.program_name AS [Programma],&lt;br /&gt;
    s.login_time AS [Ora Connessione],&lt;br /&gt;
    s.status AS [Stato Sessione],&lt;br /&gt;
    r.command AS [Comando Corrente],&lt;br /&gt;
    t.text AS [Query SQL in Esecuzione]&lt;br /&gt;
 FROM sys.dm_exec_sessions s&lt;br /&gt;
 LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id&lt;br /&gt;
 OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t&lt;br /&gt;
 WHERE s.is_user_process = 1&lt;br /&gt;
 and s.status = &#039;running&#039;&lt;br /&gt;
 ORDER BY s.login_time asc;&lt;br /&gt;
&lt;br /&gt;
==sessioni bloccate==&lt;br /&gt;
&lt;br /&gt;
 SELECT &lt;br /&gt;
    r.session_id AS [Sessione Bloccata],&lt;br /&gt;
    r.blocking_session_id AS [ID Bloccante],&lt;br /&gt;
    t.text AS [Query Bloccante],&lt;br /&gt;
    w.wait_type AS [Tipo di Attesa],&lt;br /&gt;
    w.wait_duration_ms AS [Durata Attesa (ms)]&lt;br /&gt;
 FROM sys.dm_exec_requests r&lt;br /&gt;
 JOIN sys.dm_os_waiting_tasks w ON r.session_id = w.session_id&lt;br /&gt;
 CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t&lt;br /&gt;
 WHERE r.blocking_session_id &amp;lt;&amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    s.session_id,&lt;br /&gt;
    s.login_name,&lt;br /&gt;
    s.host_name,&lt;br /&gt;
    s.program_name,&lt;br /&gt;
    s.status AS session_status,&lt;br /&gt;
    r.start_time,&lt;br /&gt;
    r.total_elapsed_time,&lt;br /&gt;
    r.wait_type,&lt;br /&gt;
    r.blocking_session_id,&lt;br /&gt;
    st.text AS query_text&lt;br /&gt;
FROM sys.dm_exec_sessions AS s&lt;br /&gt;
LEFT JOIN sys.dm_exec_requests AS r ON s.session_id = r.session_id&lt;br /&gt;
LEFT JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id&lt;br /&gt;
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st&lt;br /&gt;
WHERE s.is_user_process = 1 -- Filtra solo i processi utente (esclude quelli di sistema)&lt;br /&gt;
ORDER BY s.session_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    r.session_id,&lt;br /&gt;
    r.status,&lt;br /&gt;
    r.wait_type,&lt;br /&gt;
    r.wait_time,&lt;br /&gt;
    r.blocking_session_id,&lt;br /&gt;
    r.cpu_time,&lt;br /&gt;
    r.total_elapsed_time / 1000 AS elapsed_seconds,&lt;br /&gt;
    t.text&lt;br /&gt;
FROM sys.dm_exec_requests r&lt;br /&gt;
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t&lt;br /&gt;
WHERE r.status = &#039;suspended&#039;&lt;br /&gt;
ORDER BY r.total_elapsed_time DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==sessione che usa il tempdb==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    s.session_id,&lt;br /&gt;
    s.login_name,&lt;br /&gt;
    s.host_name,&lt;br /&gt;
    s.program_name,&lt;br /&gt;
    r.status,&lt;br /&gt;
    r.command,&lt;br /&gt;
    (su.user_objects_alloc_page_count&lt;br /&gt;
     + su.internal_objects_alloc_page_count) * 8 / 1024 AS TempDB_MB,&lt;br /&gt;
    st.text&lt;br /&gt;
FROM sys.dm_db_session_space_usage su&lt;br /&gt;
JOIN sys.dm_exec_sessions s&lt;br /&gt;
    ON su.session_id = s.session_id&lt;br /&gt;
LEFT JOIN sys.dm_exec_requests r&lt;br /&gt;
    ON s.session_id = r.session_id&lt;br /&gt;
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) st&lt;br /&gt;
WHERE s.session_id &amp;gt; 50&lt;br /&gt;
ORDER BY TempDB_MB DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:MS SQL Server]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6463</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6463"/>
		<updated>2026-09-30T22:45:23Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
Ordinati per grandezza&lt;br /&gt;
 select &#039;/* size &#039; || s.bytes/(1024*1024) || &#039; table &#039; || i.table_name || &#039; */ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6462</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6462"/>
		<updated>2026-09-30T22:43:39Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
Ordinati per grandezza&lt;br /&gt;
 select &#039;/* &#039; || s.bytes/(1024*1024) i.table_name || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6461</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6461"/>
		<updated>2026-09-30T22:42:13Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===rimettere in logging===&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6460</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6460"/>
		<updated>2026-09-30T22:39:34Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.username=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6459</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6459"/>
		<updated>2026-09-30T22:38:50Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; logging;&#039; from dba_indexes i&lt;br /&gt;
  where i.logging=&#039;NO&#039; and i.owner !=&#039;PERFSTAT&#039;&lt;br /&gt;
  and not exists (select 1 from dba_users u where u.osername=i.owner and u.oracle_maintained=&#039;Y&#039;) &lt;br /&gt;
  and not exists (select 1 from dba_tables t where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6458</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6458"/>
		<updated>2026-09-30T22:34:48Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) and not exists (select 1 from dba_tables where t.table_name=i.table_name and t.owner=i.table_owner and t.logging=&#039;NO&#039;);&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6457</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6457"/>
		<updated>2026-09-30T22:32:48Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
non va messo in logging un indice su una tabella in nologging:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rebuild indici UNUSABLE:&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6456</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6456"/>
		<updated>2026-09-30T22:22:04Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039; and owner in (select username from dba_users where oracle_maintained=&#039;N&#039;);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6455</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6455"/>
		<updated>2026-09-30T22:21:08Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
Rimette in logging&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6454</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6454"/>
		<updated>2026-09-30T22:01:38Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;/* &#039; || s.bytes || &#039;*/ alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6453</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6453"/>
		<updated>2026-09-30T21:58:52Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;tbs_destinazione online nologging compute statistics;&#039; &lt;br /&gt;
  from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner &lt;br /&gt;
  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;tbs_sorgente&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6452</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6452"/>
		<updated>2026-09-30T21:56:29Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;1&#039; order by s.bytes desc;&lt;br /&gt;
&lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6451</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6451"/>
		<updated>2026-09-30T21:55:45Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes i inner join dba_segments s on s.segment_name=i.index_name and s.owner=i.owner  where i.index_type=&#039;NORMAL&#039; and s.tablespace_name=&#039;&amp;amp;1&#039; order by s.bytes desc&lt;br /&gt;
 &lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6450</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6450"/>
		<updated>2026-09-30T16:16:51Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where index_type=&#039;NORMAL&#039; and tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
 &lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6449</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6449"/>
		<updated>2026-09-30T16:14:29Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where tablespace_name=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
 &lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6448</id>
		<title>Oracle Spostamento Oggetti</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spostamento_Oggetti&amp;diff=6448"/>
		<updated>2026-09-30T16:13:17Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Spostamento Indici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mappa oggetti per tablespace==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on tab off&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select tablespace_name,segment_type,count(*),sum(bytes)/(1024*1024) from dba_segments where owner in (select username from dba_users where oracle_maintained=&#039;N&#039;) group by tablespace_name,segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
 select s.tablespace_name,s.segment_type,count(*),sum(s.bytes)/(1024*1024) from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type order by 2,1;&lt;br /&gt;
&lt;br /&gt;
Per schema&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select s.owner,s.tablespace_name,s.segment_type,count(*),round(sum(s.bytes)/(1024*1024)) as mb from dba_segments s inner join dba_users u on (s.owner=u.username and u.oracle_maintained=&#039;N&#039;) group by s.tablespace_name,s.segment_type,s.owner order by 1,2,3,5;&lt;br /&gt;
&lt;br /&gt;
==cerca ultimo oggetto nel tablespace/datafile==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 select * from (&lt;br /&gt;
        select owner, segment_name, segment_type, block_id, file_id&lt;br /&gt;
          from dba_extents&lt;br /&gt;
         where file_id in ( select file_id&lt;br /&gt;
                              from dba_data_files&lt;br /&gt;
                             where tablespace_name = &#039;&amp;amp;1&#039; )&lt;br /&gt;
      order by block_id desc,file_id desc&lt;br /&gt;
 ) where rownum &amp;lt;= 10;&lt;br /&gt;
&lt;br /&gt;
==Spostamento Indici==&lt;br /&gt;
&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set trim on&lt;br /&gt;
 set trims on&lt;br /&gt;
 &lt;br /&gt;
 -- la rebuild di indici su colonne varchar bytes viene eseguita in varchar char se nls_semantics a char.&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;1 online nologging compute statistics;&#039; from dba_indexes where tablespace_name=&#039;&amp;amp;2&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; rebuild tablespace &amp;amp;2 online nologging compute statistics;&#039; from dba_indexes where tablespace_name=&#039;&amp;amp;1&#039; or status=&#039;UNUSABLE&#039;;&lt;br /&gt;
 &lt;br /&gt;
 prompt &#039;ALTER SESSION SET ddl_lock_timeout=30;&#039;&lt;br /&gt;
 select &#039;alter index &#039; || owner || &#039;.&#039; || index_name || &#039; logging;&#039; from dba_indexes where LOGGING=&#039;NO&#039; and owner !=&#039;PERFSTAT&#039;;&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter index &#039; || i.owner || &#039;.&#039; || i.index_name || &#039; rebuild tablespace &#039; || i.tablespace_name || &#039; nologging compute statistics;&#039;&lt;br /&gt;
 from dba_indexes i where i.status=&#039;UNUSABLE&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metodo PL/SQL:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner, index_name from dba_indexes where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter index &amp;quot;&#039; || c1.owner || &#039;&amp;quot;.&amp;quot;&#039; || c1.index_name || &#039;&amp;quot; rebuild tablespace &amp;quot;PERFSTAT&amp;quot; online nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento LOB==&lt;br /&gt;
&lt;br /&gt;
===Spazio occupato dai LOB===&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col segment_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.table_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per tabelle partizionate&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 col partition_name for a25&lt;br /&gt;
 col column_name for a30&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 col tablespace_name for a15&lt;br /&gt;
 col comp for a6&lt;br /&gt;
 col dedup for a4&lt;br /&gt;
 select l.owner,s.tablespace_name,l.table_name,s.partition_name,l.column_name,&lt;br /&gt;
 round(s.bytes/(1024*1024)) mb,l.compression comp,l.deduplication dedup,l.logging,l.securefile&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  and s.tablespace_name not in (&#039;SYSTEM&#039;,&#039;SYSAUX&#039;)&lt;br /&gt;
  order by 6,3,5;&lt;br /&gt;
&lt;br /&gt;
===Comandi Spostamento LOB===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
con &amp;lt;code&amp;gt;nls_length_semantics&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ci sono brutti effetti collaterali:&lt;br /&gt;
&lt;br /&gt;
 prompt alter session set nls_length_semantics=BYTE;&lt;br /&gt;
&lt;br /&gt;
Sintassi&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE table_name MOVE LOB (lob_column) STORE AS securefile (TABLESPACE tablespace_name);&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || owner || &#039;.&#039; || TABLE_NAME || &#039; move lob (&#039; || COLUMN_NAME || &#039;) store as securefile (tablespace &amp;amp;2);&#039;&lt;br /&gt;
  from dba_lobs where TABLESPACE_NAME=&#039;&amp;amp;1&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
utilizzo funzione listagg per spostare tutti i  lob di una tabella con un solo comando&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.owner || &#039;.&#039; || l.table_name || &#039; move lob (&#039; ||&lt;br /&gt;
  listagg(l.column_name,&#039;) store as securefile (nocache nologging) lob (&#039;)&lt;br /&gt;
     within group (order by l.column_name) ||&lt;br /&gt;
  &#039;) store as securefile (nocache nologging) nologging;&#039;&lt;br /&gt;
 from dba_lobs l where l.securefile=&#039;NO&#039;&lt;br /&gt;
 and l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) &lt;br /&gt;
 group by l.owner,l.table_name;&lt;br /&gt;
&lt;br /&gt;
compressione e deduplica richiedono avanced compression.&lt;br /&gt;
La clausola *online*, oltre a richiedere EE, utilizza un grosso quantitativo di spazio&lt;br /&gt;
per segmenti temporanei sul tablespace sorgente:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; move lob (&#039; || l.COLUMN_NAME || &#039;) store as securefile (compress high deduplicate nocache nologging tablespace TBSLOB ) online;&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
per riportare in logging:&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter table &#039; || l.OWNER || &#039;.&#039; || l.TABLE_NAME || &#039; modify lob(&#039; || l.COLUMN_NAME || &#039;) (cache logging );&#039;&lt;br /&gt;
  from dba_lobs l&lt;br /&gt;
  where l.owner not in (&#039;SYS&#039;,&#039;SYSTEM&#039;,&#039;XDB&#039;,&#039;OUTLN&#039;,&#039;WMSYS&#039;,&#039;AUDSYS&#039;) and l.column_name !=&#039;USER_PROP&#039; and tablespace_name !=&#039;TBSLOB&#039;&lt;br /&gt;
  order by l.OWNER ;&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200 linesize 200 trim on trims on&lt;br /&gt;
 col owner for a10&lt;br /&gt;
 col segment_name for a30&lt;br /&gt;
 col column_name for a20&lt;br /&gt;
 col table_name for a30&lt;br /&gt;
 select l.owner,l.segment_name,s.tablespace_name,l.column_name,l.table_name,s.bytes/(1024*1024),compression&lt;br /&gt;
  from dba_lobs l inner join dba_segments s on (l.owner=s.owner and l.segment_name=s.segment_name)&lt;br /&gt;
  where s.owner=&#039;LOBUSER&#039;;&lt;br /&gt;
&lt;br /&gt;
===plsql===&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select owner,table_name,column_name from dba_lobs where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table &#039; || c1.owner || &#039;.&#039; || c1.table_name || &#039; move lob (&#039; || c1.column_name || &#039;) store as securefile (tablespace &amp;quot;&amp;amp;2&amp;quot; ) nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Spostamento Tabelle==&lt;br /&gt;
 begin&lt;br /&gt;
 for c1 in (select table_name from dba_tables where owner=&#039;PERFSTAT&#039; and tablespace_name=&#039;USERS&#039;)&lt;br /&gt;
 loop&lt;br /&gt;
   begin&lt;br /&gt;
    execute immediate &#039;alter table perfstat.&#039; || c1.table_name || &#039; move tablespace &amp;quot;PERFSTAT&amp;quot; nologging&#039;;&lt;br /&gt;
    exception&lt;br /&gt;
     when others then&lt;br /&gt;
      null;&lt;br /&gt;
   end;&lt;br /&gt;
 end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==segment Advisor==&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Oracle]]&lt;br /&gt;
[[Categoria:Database]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6447</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6447"/>
		<updated>2026-09-30T16:08:31Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Segmenti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
Tablespace map&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name=&#039;&amp;amp;1&#039; group by owner,segment_type order by 1,2;&lt;br /&gt;
&lt;br /&gt;
 col owner for a20&lt;br /&gt;
 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;&lt;br /&gt;
&lt;br /&gt;
=Segment Advisor=&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
Per eseguire lo shrink delle tabelle:&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set verify off echo off&lt;br /&gt;
 alter table &amp;amp;1 enable row movement;&lt;br /&gt;
 -- non mette lock esclusivo ma non libera lo spazio&lt;br /&gt;
 alter table &amp;amp;1 shrink space compact;&lt;br /&gt;
 -- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine&lt;br /&gt;
 alter table &amp;amp;1 shrink space;         &lt;br /&gt;
 alter table &amp;amp;1 disable row movement;&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6446</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6446"/>
		<updated>2026-09-30T16:07:50Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Segmenti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
Tablespace map&lt;br /&gt;
&lt;br /&gt;
 select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name=&#039;&amp;amp;1&#039; group by owner,segment_type order by 1,2;&lt;br /&gt;
&lt;br /&gt;
 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;&lt;br /&gt;
&lt;br /&gt;
=Segment Advisor=&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
Per eseguire lo shrink delle tabelle:&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set verify off echo off&lt;br /&gt;
 alter table &amp;amp;1 enable row movement;&lt;br /&gt;
 -- non mette lock esclusivo ma non libera lo spazio&lt;br /&gt;
 alter table &amp;amp;1 shrink space compact;&lt;br /&gt;
 -- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine&lt;br /&gt;
 alter table &amp;amp;1 shrink space;         &lt;br /&gt;
 alter table &amp;amp;1 disable row movement;&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6445</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6445"/>
		<updated>2026-09-30T16:06:34Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Segmenti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
Tablespace map&lt;br /&gt;
&lt;br /&gt;
 select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name=&#039;&amp;amp;1&#039; group by owner,segment_type order by 1,2;&lt;br /&gt;
&lt;br /&gt;
 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;&lt;br /&gt;
&lt;br /&gt;
=Segment Advisor=&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set pagesize 200&lt;br /&gt;
 set linesize 200&lt;br /&gt;
 set autotrace off&lt;br /&gt;
 -- select tablespace_name, segment_name, segment_type, partition_name,&lt;br /&gt;
 -- recommendations, c1 from&lt;br /&gt;
 -- table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;));&lt;br /&gt;
 spool segadv.txt&lt;br /&gt;
 select &#039;/*&#039; || recommendations || &#039; */ &#039; || c1 || &#039;;&#039; from&lt;br /&gt;
  table(dbms_space.asa_recommendations(&#039;FALSE&#039;, &#039;FALSE&#039;, &#039;FALSE&#039;)) where c1 is not null order by segment_type,reclaimable_space;&lt;br /&gt;
 spool off&lt;br /&gt;
&lt;br /&gt;
Per eseguire lo shrink delle tabelle:&lt;br /&gt;
&lt;br /&gt;
 --&lt;br /&gt;
 set verify off echo off&lt;br /&gt;
 alter table &amp;amp;1 enable row movement;&lt;br /&gt;
 -- non mette lock esclusivo ma non libera lo spazio&lt;br /&gt;
 alter table &amp;amp;1 shrink space compact;&lt;br /&gt;
 -- libera lo spazio ma mette lock esclusivo per liberare spazio alla fine&lt;br /&gt;
 alter table &amp;amp;1 shrink space;         &lt;br /&gt;
 alter table &amp;amp;1 disable row movement;&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6444</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6444"/>
		<updated>2026-09-30T14:55:24Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Segmenti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
Tablespace map&lt;br /&gt;
&lt;br /&gt;
 select owner,segment_type,sum(bytes)/(1024*1024) mb from dba_segments where tablespace_name=&#039;&amp;amp;1&#039; group by owner,segment_type order by 1,2;&lt;br /&gt;
&lt;br /&gt;
 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;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6443</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6443"/>
		<updated>2026-09-30T10:47:22Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Autoextend datafiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039; and autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6442</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6442"/>
		<updated>2026-09-29T19:05:41Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
===shrink temporary tablespace===&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6441</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6441"/>
		<updated>2026-09-29T19:04:12Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* aggiunta datafiles e tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 5 al 10 (in caso che non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 5..10&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6440</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6440"/>
		<updated>2026-09-29T18:40:24Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select &#039;alter tablespace &#039; || tablespace_name || &#039; shrink space;&#039; from dba_tablespaces where contents=&#039;TEMPORARY&#039;;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6439</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6439"/>
		<updated>2026-09-29T18:39:07Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 alter tablespace temp shtink space;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6438</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6438"/>
		<updated>2026-09-29T18:37:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
     exceptions&lt;br /&gt;
      when others then&lt;br /&gt;
       null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 alter tablespace temp shtink space;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6437</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6437"/>
		<updated>2026-09-29T18:36:17Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
     when others&lt;br /&gt;
      then&lt;br /&gt;
       null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 alter tablespace temp shtink space;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6436</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6436"/>
		<updated>2026-09-29T18:35:51Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* shrink tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immedtate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
     when others&lt;br /&gt;
      then&lt;br /&gt;
       null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 alter tablespace temp shtink space;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6435</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6435"/>
		<updated>2026-09-29T18:35:31Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Autoextend tempfiles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==shrink tempfiles==&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select FILE_ID from dba_temp_files where AUTOEXTENSIBLE=&#039;YES&#039; and maxbytes &amp;gt;= bytes)&lt;br /&gt;
   loop&lt;br /&gt;
    begin&lt;br /&gt;
     execute immedtate &#039;alter database tempfile &#039; || c1.file_id || &#039; resize 8M&#039;;&lt;br /&gt;
     when others&lt;br /&gt;
      then&lt;br /&gt;
       null;&lt;br /&gt;
    end;&lt;br /&gt;
   end loop;&lt;br /&gt;
  end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6434</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6434"/>
		<updated>2026-09-29T18:32:02Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Files e Tablespaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6433</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6433"/>
		<updated>2026-09-29T18:22:23Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Controllo Allocazione Spazio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
==Controllo Allocazione Spazio==&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
	<entry>
		<id>http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6432</id>
		<title>Oracle Spazio</title>
		<link rel="alternate" type="text/html" href="http://www.emigar.com/wiki/index.php?title=Oracle_Spazio&amp;diff=6432"/>
		<updated>2026-09-29T18:21:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: /* Schedula pulizia recycle bin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ASM=&lt;br /&gt;
[[Oracle_ASM | Gestione ASM ]]&lt;br /&gt;
=Files e Tablespaces=&lt;br /&gt;
=Controllo Allocazione Spazio=&lt;br /&gt;
Questa query controlla lo spazio allocato, e lo confronta con lo spazio di massima crescita dei datafiles.&lt;br /&gt;
Utile per evidenziare casi in cui è necessario aggiungere altri datafiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,sum(bytes)/(1024*1024) mbs, count(*) nsegs from dba_segments group by tablespace_name),&lt;br /&gt;
 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&lt;br /&gt;
             from dba_data_files group by tablespace_name)&lt;br /&gt;
select t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
        s.nsegs,&lt;br /&gt;
	round(f.max) max,&lt;br /&gt;
	round(s.mbs) mbs,&lt;br /&gt;
	round(f.max-s.mbs) sdiff,&lt;br /&gt;
	round(((f.max-s.mbs)/f.max)*100) pcts,&lt;br /&gt;
	round(f.mba) mba,&lt;br /&gt;
	round(f.mba-s.mbs) shrinkable,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pctsrnk&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 10;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 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)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Per 10.2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
 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),&lt;br /&gt;
 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)&lt;br /&gt;
select&lt;br /&gt;
        t.tablespace_name,&lt;br /&gt;
        f.nf nfiles,&lt;br /&gt;
        f.mba,&lt;br /&gt;
        f.max,&lt;br /&gt;
        tsh.used mballoc,&lt;br /&gt;
        tsh.free mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join tsh on (tsh.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort Segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT tf.tablespace_name,&lt;br /&gt;
       ROUND(tf.total_space_mb) AS total_mb,&lt;br /&gt;
       ROUND(NVL(tu.used_space_mb, 0)) AS used_mb,&lt;br /&gt;
       ROUND(tf.total_space_mb - NVL(tu.used_space_mb, 0)) AS free_mb&lt;br /&gt;
FROM (SELECT tablespace_name, SUM(bytes)/(1024*1024) AS total_space_mb &lt;br /&gt;
      FROM dba_temp_files GROUP BY tablespace_name) tf&lt;br /&gt;
LEFT JOIN (SELECT tablespace_name, SUM(used_blocks)*(SELECT value FROM v$parameter WHERE name=&#039;db_block_size&#039;)/(1024*1024) AS used_space_mb&lt;br /&gt;
           FROM v$sort_segment GROUP BY tablespace_name) tu&lt;br /&gt;
ON tf.tablespace_name = tu.tablespace_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Versioni vecchie===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
set pagesize 200&lt;br /&gt;
set linesize 200&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
 segs as (select tablespace_name,round(sum(bytes)/(1024*1024)) mbs from dba_segments group by tablespace_name),&lt;br /&gt;
 files as (select tablespace_name,count(file_name) nfiles,round(sum(maxbytes)/(1024*1024)) max,round(sum(bytes)/(1024*1024)) mba from dba_data_files group by tablespace_name)&lt;br /&gt;
select	t.tablespace_name,&lt;br /&gt;
	t.block_size,&lt;br /&gt;
	f.nfiles,&lt;br /&gt;
	f.max,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	s.mbs,&lt;br /&gt;
	f.mba-s.mbs diff,&lt;br /&gt;
	f.max-f.mba mdiff,&lt;br /&gt;
	round(((f.max-f.mba)/f.max)*100) pcta,&lt;br /&gt;
	round(((f.mba-s.mbs)/f.mba)*100) pcts&lt;br /&gt;
from dba_tablespaces t &lt;br /&gt;
inner join files f on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
left outer join segs s on (t.tablespace_name=s.tablespace_name)&lt;br /&gt;
order by 7;&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
 tf as (select tablespace_name,round(sum(bytes)/(1024*1024)) mba,round(sum(maxbytes)/(1024*1024)) max from dba_temp_files group by tablespace_name)&lt;br /&gt;
select	g.group_name,&lt;br /&gt;
	t.tablespace_name,&lt;br /&gt;
	f.mba,&lt;br /&gt;
	f.max,&lt;br /&gt;
	round(s.allocated_space/(1024*1024)) mballoc,&lt;br /&gt;
	round(s.free_space/(1024*1024)) mbfree&lt;br /&gt;
   from tf f&lt;br /&gt;
 left outer join dba_tablespace_groups g on (g.tablespace_name=f.tablespace_name)&lt;br /&gt;
 left outer join dba_temp_free_space s on (s.tablespace_name=f.tablespace_name)&lt;br /&gt;
 right outer join dba_tablespaces t on (t.tablespace_name=f.tablespace_name)&lt;br /&gt;
 where t.contents=&#039;TEMPORARY&#039;&lt;br /&gt;
 order by 1,2,3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
       TBS.MB_TBS,&lt;br /&gt;
       SEG.MB_SEG,&lt;br /&gt;
       TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
       TBS.TABLESPACE_NAME&lt;br /&gt;
  from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
               round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
               f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_data_files f&lt;br /&gt;
         group by f.tablespace_name) TBS,&lt;br /&gt;
       (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
               s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
          from dba_segments s&lt;br /&gt;
         group by s.tablespace_name) SEG&lt;br /&gt;
  where SEG.tablespace_name=TBS.tablespace_name;&lt;br /&gt;
&lt;br /&gt;
 select TBS.MB_MAX,&lt;br /&gt;
      TBS.MB_TBS,&lt;br /&gt;
      SEG.MB_SEG,&lt;br /&gt;
      TBS.MB_MAX-SEG.MB_SEG MB_FREE,&lt;br /&gt;
      100-(100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0)) USED,&lt;br /&gt;
      100*(TBS.MB_MAX-SEG.MB_SEG)/nullif(TBS.MB_MAX,0) FREE,&lt;br /&gt;
      TBS.TABLESPACE_NAME&lt;br /&gt;
 from (select round(sum(f.maxbytes)/(1024*1024)) MB_MAX,&lt;br /&gt;
              round(sum(f.user_bytes)/(1024*1024)) MB_TBS,&lt;br /&gt;
              f.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_data_files f&lt;br /&gt;
        group by f.tablespace_name) TBS,&lt;br /&gt;
      (select round(sum(s.bytes)/(1024*1024)) MB_SEG,&lt;br /&gt;
              s.tablespace_name TABLESPACE_NAME&lt;br /&gt;
         from dba_segments s&lt;br /&gt;
        group by s.tablespace_name) SEG&lt;br /&gt;
 where SEG.tablespace_name=TBS.tablespace_name&lt;br /&gt;
  order by 5;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autoextend datafiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_data_files;&lt;br /&gt;
&lt;br /&gt;
Autoextend datafiles:&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Su un solo tablespace&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_data_files where tablespace_name=&#039;&amp;amp;1&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Mette in autoextend i files non in autoextend, ma con maxsize uguale alla grandezza reale&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id, bytes from dba_data_files where autoextensible=&#039;NO&#039;)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database datafile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Autoextend tempfiles==&lt;br /&gt;
&lt;br /&gt;
Verificare se autoextend:&lt;br /&gt;
 select TABLESPACE_NAME,FILE_ID,AUTOEXTENSIBLE,bytes/(1024*1024) MB,MAXBYTES/(1024*1024) MAX_MB,INCREMENT_BY from dba_temp_files;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
Preservando maxsize:&lt;br /&gt;
 begin&lt;br /&gt;
  for c1 in (select file_id,bytes from dba_temp_files)&lt;br /&gt;
  loop&lt;br /&gt;
    execute immediate &#039;alter database tempfile &#039; || c1.file_id || &#039; autoextend on next 128M maxsize &#039; || c1.bytes;&lt;br /&gt;
  end loop;&lt;br /&gt;
 end;&lt;br /&gt;
 /&lt;br /&gt;
&lt;br /&gt;
==Shrink datafiles==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set linesize 1000 pagesize 0 feedback off trimspool on&lt;br /&gt;
with&lt;br /&gt;
 hwm as (&lt;br /&gt;
  -- get highest block id from each datafiles ( from x$ktfbue as we don&#039;t need all joins from dba_extents )&lt;br /&gt;
  select /*+ materialize */ ktfbuesegtsn ts#,ktfbuefno relative_fno,max(ktfbuebno+ktfbueblks-1) hwm_blocks&lt;br /&gt;
  from sys.x$ktfbue group by ktfbuefno,ktfbuesegtsn&lt;br /&gt;
 ),&lt;br /&gt;
 hwmts as (&lt;br /&gt;
  -- join ts# with tablespace_name&lt;br /&gt;
  select name tablespace_name,relative_fno,hwm_blocks&lt;br /&gt;
  from hwm join v$tablespace using(ts#)&lt;br /&gt;
 ),&lt;br /&gt;
 hwmdf as (&lt;br /&gt;
  -- join with datafiles, put 5M minimum for datafiles with no extents&lt;br /&gt;
  select file_name,nvl(hwm_blocks*(bytes/blocks),5*1024*1024)&lt;br /&gt;
hwm_bytes,bytes,autoextensible,maxbytes&lt;br /&gt;
  from hwmts right join dba_data_files using(tablespace_name,relative_fno)&lt;br /&gt;
 )&lt;br /&gt;
select&lt;br /&gt;
 case when autoextensible=&#039;YES&#039; and maxbytes&amp;gt;=bytes&lt;br /&gt;
 then -- we generate resize statements only if autoextensible can grow back to current size&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)||&#039;M */ &#039;&lt;br /&gt;
   ||&#039;alter database datafile &#039;&#039;&#039;||file_name||&#039;&#039;&#039; resize &#039;||ceil(hwm_bytes/1024/1024)||&#039;M;&#039;&lt;br /&gt;
 else -- generate only a comment when autoextensible is off&lt;br /&gt;
  &#039;/* reclaim &#039;||to_char(ceil((bytes-hwm_bytes)/1024/1024),999999)&lt;br /&gt;
   ||&#039;M from &#039;||to_char(ceil(bytes/1024/1024),999999)&lt;br /&gt;
   ||&#039;M after setting autoextensible maxsize higher than current size for file &#039;&lt;br /&gt;
   || file_name||&#039; */&#039;&lt;br /&gt;
 end SQL&lt;br /&gt;
from hwmdf&lt;br /&gt;
where&lt;br /&gt;
 bytes-hwm_bytes&amp;gt;1024*1024 -- resize only if at least 1MB can be reclaimed&lt;br /&gt;
order by bytes-hwm_bytes desc&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==aggiunta datafiles e tempfiles==&lt;br /&gt;
&lt;br /&gt;
aggiunge datafiles dal 43 al 60 (in caso che ci siano già 42 datafiles nel tablespace e non abbiamo db_create_file_dest valorizzato)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
   for c1 in 43..60&lt;br /&gt;
   loop&lt;br /&gt;
    execute immediate &#039;alter tablespace TBSDATA add datafile &#039;&#039;/u01/app/oracle/oradata/ORCL/tbsdata_0&#039; || c1 || &#039;.dbf&#039;&#039; size 8M autoextend on next 128M maxsize unlimited&#039;;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Recyclebin=&lt;br /&gt;
==Schedula pulizia recycle bin==&lt;br /&gt;
Cancella dal recyclebin tutti gli oggetti cancellati da almeno 3 giorni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN&lt;br /&gt;
  DBMS_SCHEDULER.create_job (&lt;br /&gt;
    job_name        =&amp;gt; &#039;purge_recyclebin_3days&#039;,&lt;br /&gt;
    job_type        =&amp;gt; &#039;PLSQL_BLOCK&#039;,&lt;br /&gt;
    job_action      =&amp;gt; &#039;&lt;br /&gt;
begin&lt;br /&gt;
  for c1 in (select owner,type,OBJECT_NAME from dba_recyclebin where to_date(DROPTIME,&#039;&#039;YYYY-MM-DD:HH24:MI:SS&#039;&#039;) &amp;lt; sysdate-3 and CAN_PURGE=&#039;&#039;YES&#039;&#039;)&lt;br /&gt;
   loop&lt;br /&gt;
     begin&lt;br /&gt;
       execute immediate &#039;&#039;purge &#039;&#039; || c1.type || &#039;&#039; &#039;&#039; || c1.owner || &#039;&#039;.&amp;quot;&#039;&#039; || c1.object_name || &#039;&#039;&amp;quot;&#039;&#039;;&lt;br /&gt;
       exception&lt;br /&gt;
        when others then&lt;br /&gt;
          null;&lt;br /&gt;
     end;&lt;br /&gt;
   end loop;&lt;br /&gt;
end;&lt;br /&gt;
&#039;,&lt;br /&gt;
    start_date      =&amp;gt; SYSTIMESTAMP,&lt;br /&gt;
    repeat_interval =&amp;gt; &#039;freq=daily; byhour=0; byminute=0; bysecond=0;&#039;,&lt;br /&gt;
    enabled         =&amp;gt; TRUE);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Temporary=&lt;br /&gt;
&lt;br /&gt;
=Segmenti=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Categoria:Database]]&lt;br /&gt;
[[Categoria:Oracle]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
</feed>