Mantenimiento de datafiles

Ingeniero informático, Oracle ACE, DBA y Arquitecto OCI, con más de 15 años de experiencia en plataformas Oracle. Certificado en OCI Certified Architect Professional y OCI Migration and Integration Certified Professional.
Adjunto un pequeño script que tengo configurado vía crontab, para tener controlado cuando los tablespaces llegan a cierto umbral que se pasa por parámetro.
Lo que se hace es redimensionar el datafile añadiendo 5Gb y me notifica vía email si ha habido algún tablespaces que haya sufrido ese mantenimiento.
¡Espero que os sirva!
#!/bin/sh
. /home/oracle/.bashrc
UMBRAL=${1}
getInfo_Tablespace() {
sqlplus -s ${USER}/${PASS}@${SID} <<EOF
set lines 200 pages 9000
set termout off
set heading off
set feedback off;
spool INFO_TABLESPACE.log
Select 'Tablespace '||"Name"||' Ocupado: '||Trunc("(Used) %",2)||'%' Info, "Name" Tablespace_Nane
From (
Select d.Status "Status",
d.Tablespace_Name "Name",
To_Char(Nvl(a.Bytes / 1024 / 1024 / 1024, 0), '99,999,990.90') "Size (GB)",
To_Char(Nvl(a.Bytes - Nvl(f.Bytes, 0), 0) / 1024 / 1024 / 1024,
'99999999.99') "Used (GB)",
To_Char(Nvl(f.Bytes / 1024 / 1024 / 1024, 0), '99,999,990.90') "Free (GB)",
Nvl((a.Bytes - Nvl(f.Bytes, 0)) / a.Bytes * 100, 0) "(Used) %"
From Sys.Dba_Tablespaces d,
(Select pp.Name Tablespace_Name, Sum(Bytes) Bytes
From v\$DATAFILE rr, v\$tablespace pp
Where rr.TS# = pp.TS#
Group By pp.Name
) a,
(Select Tablespace_Name, Sum(Bytes) Bytes
From Dba_Free_Space
Group By Tablespace_Name) f
Where d.Tablespace_Name = a.Tablespace_Name(+)
And d.Tablespace_Name = f.Tablespace_Name(+)
And Not (d.Extent_Management Like 'LOCAL' And d.Contents Like 'TEMPORARY')
) Where "(Used) %" >= ${UMBRAL} And Instr("Name",'SYS') = 0 And Instr("Name",'UNDOTBS1') = 0;
set heading on;
set feedback on;
spool off;
exit;
EOF
}
lanza_sqlplus() {
sqlplus -s ${USER}/${PASS}@${SID} <<EOF
set lines 200 pages 9000
set termout off
set heading off
${SQL}
EXIT;
EOF
}
getInfo_Tablespace
LINEAS=`cat INFO_TABLESPACE.log`
if [[ "$LINEAS" ]]
then
while IFS='' read -r line
do
set __ $line
TABLESPACE=${6}
if [[ "${TABLESPACE}" ]]
then
SQL=$(cat <<EOF
Select Name, Ceil((BYTES + (5*(1024*1024*1024)))/1024/1024) Size_Mb
From (
Select r.FILE#, r.NAME , BYTES
From v\$datafile r, v\$Tablespace z
Where z.name = '${TABLESPACE}'
And z.ts# = r.TS#
Order By CREATION_TIME Desc
)
Where Rownum = 1;
EOF
)
set __ $(lanza_sqlplus)
DATAFILE=${2}
TAMANYO=${3}
if [[ "${DATAFILE}" ]]
then
echo ${2}
SQL=$(cat << EOF
begin
execute immediate 'ALTER DATABASE DATAFILE ''${DATAFILE}'' RESIZE ${TAMANYO}M';
end;
/
EOF
)
echo ${SQL}
$(lanza_sqlplus)
. /home/oracle/scripts/email.sh "Mantenimiento Tablespace ${TABLESPACE} with more ${UMBRAL}%" "Mantenimiento Tablespace ${TABLESPACE} with more ${UMBRAL}%"
fi
fi
done < INFO_TABLESPACE.log
fi
![[OCI] Upgrade 19c a 26ai](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/a3c1b3a1-9152-47c4-8209-11bffce67e8e.png)
![[OCI] 19c DBCA - Silent mode](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/290a85d4-e3d3-475f-a6a6-5f4095bd9d3a.png)
![[OCI] Oracle Grid Infrastructure 19c (Oracle Restart + ASM)](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/d022eac1-1acd-4def-8ec1-7612950afe1c.png)
![[26ai] SQL: Calendar functions/Aggregation Filters "CALENDAR"](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/587e3328-9877-4c7a-aad7-7811e251f81e.png)
![[OCI] Recreación PDB$SEED](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/289ede5b-558c-4f93-b5c0-fa04680c91ca.png)