Principales scripts de monitorización de bases de datos Oracle para DBAs

Principales scripts de monitorización de bases de datos Oracle para DBAs

  • ITOps y DevOps
6 min de lectura Actualizado Feb 14, 2025

Puntos clave: Los mejores scripts de monitoreo de bases de datos Oracle proporcionan scripts esenciales de shell para que los DBAs automatizen tareas de monitorización de bases de datos, mejorando la eficiencia y el rendimiento. Estos scripts se centran en la disponibilidad de instancias, comprobaciones de oyentes, revisiones de registros de alertas y gestión del espacio de mesas, facilitando la monitorización proactiva.

  • Automatiza las comprobaciones, por ejemplo, y la disponibilidad de oyentes.
  • Ayuda en las revisiones de registros de alertas y tareas de limpieza.

Como administrador de bases de datos (DBA), te desempeñar un papel importante para garantizar que las bases de datos de tu organización son seguras, disponibles y funcionen correctamente. Desde la instalación y configuración, pasando por la optimización del rendimiento, la integridad de los datos y la consistencia, hasta la resolución de problemas, mantenimiento, actualizaciones y parches, tu responsabilidad están crítica. te también debes gestiona seguridad y acceso, planificar ante desastres y recuperación, y Haz asegurarte de que tus sistemas son siempre conformes.

Tu rol, responsabilidades y capacidades tecnológicas son en constante evolución a medida que cambian la innovación, la regulación y las necesidades empresariales. El DBA moderno es visionario, estratégico y se mantiene al día con las nuevas tecnologías de bases de datos.

En este artículo, tú puedes recopilar algunos consejos y técnicas sobre cómo Obtén el máximo partido a las bases de datos de Oracle y convertir las actividades de monitorización manual y reactiva en un conjunto de scripts proactivos de shell. Primero, revisaremos algunos comandos Unix más usados y explicaremos los trabajos Cron de Unix que son utilizados como parte del mecanismo de programación para ejecutar scripts de DBA. Después, concluiremos con ideas para los scripts más importantes para monitorizar la base de datos de Oracle.

Scripts importantes de Shell de Monitorización de la Base de Datos Oracle

Conceptos básicos de UNIX para el DBA

Comando UNIX básico

A continuación están una lista de comandos Unix más usados:

  • ps - Proceso de exhibición
  • grep - Búsqueda en archivos de patrones de texto
  • mailx - Leer o enviar correo
  • cat - Unir archivos o mostrarlos
  • Cortar - Seleccionar columnas para mostrar
  • awk - Lenguaje de coincidencia de patrones
  • df - Mostrar espacio libre en disco
Comandos UNIX comunes para la administración de bases de datos

Aquí son algunos ejemplos de cómo el DBA utiliza estos comandos:

  • Enumera las instancias disponibles en un servidor:
    $ ps -ef | grep smon
oracle 21832     1  0   Feb 24 ?       19:05 ora_smon_oradb1
oracle   898     1  0   Feb 15 ?        0:00 ora_smon_oradb2
dliu 25199 19038  0 10:48:57 pts/6    0:00 grep smon
oracle 27798     1  0 05:43:54 ?        0:00 ora_smon_oradb3
oracle 28781     1  0   Mar 03 ?        0:01 ora_smon_oradb4
  • Lista de oyentes disponibles en un servidor:
    $ ps -ef | grep listener | grep -v grep
oracle 23879    1  0   Feb 24 ?  33:36 /8.1.7/bin/tnslsnr listener_db1 -inherit
oracle 27939    1  0 05:44:02 ?  0:00  /8.1.7/bin/tnslsnr listener_db2 -inherit
oracle 23536    1  0   Feb 12 ?  4:19  /8.1.7/bin/tnslsnr listener_db3 -inherit
oracle 28891    1  0   Mar 03 ?  0:01  /8.1.7/bin/tnslsnr listener_db4 -inherit
  • Descubre el uso del sistema de archivos para el destino de archivo de Oracle:
    $ df -k | grep oraarch
/dev/vx/dsk/proddg/oraarch 71123968 4754872 65850768  7%  /u09/oraarch
  • Lista de líneas en el archivo alert.log:
    $ cat alert.log | wc -l
2984
  • Enumera todos los mensajes de error de Oracle del archivo alert.log:
    $ grep ORA- alert.log
ORA-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []
ORA-00600: internal error code, arguments: [1881], [25860496], [25857716], []

Conceptos básicos de CRONTAB

Un archivo crontab está compuesto por seis campos:

Minuto 0-59
Hora 0-23
Día del mes 1-31
Mes 1 - 12
Día de la semana 0 - 6, con 0 = domingo
Scripts de comandos o shell de Unix
  • Para editar un archivo crontab, escribe:
    Crontab -e
  • Para ver un archivo crontab, escribe:
    Crontab -l

0  4 * * 5       /dba/admin/analyze_table.ksh
30 3  * * 3,6    /dba/admin/hotbackup.ksh /dev/null 2>&1

En el ejemplo anterior, la primera entrada muestra que un script para analizar una tabla se ejecuta todos los viernes a las 4:00 a.m. La segunda entrada muestra que un script para realizar una copia de seguridad en caliente se ejecuta todos los miércoles y sábados a las 3:00 a.m.

8 scripts importantes de shell de DBA para monitorizar bases de datos Oracle

Los ocho scripts de shell proporcionados a continuación cubren el 90 por ciento de las actividades diarias de monitorización de un DBA. te deberá modificar las variables del entorno UNIX según corresponda.

Comprobar la disponibilidad de Oracle Instance

El archivo oratab lista todas las bases de datos en un servidor:

    $ cat /var/opt/oracle/oratab
###################################################################
## /var/opt/oracle/oratab                                        ##
###################################################################
oradb1:/u01/app/oracle/product/8.1.7:Y
oradb2:/u01/app/oracle/product/8.1.7:Y
oradb3:/u01/app/oracle/product/8.1.7:N
oradb4:/u01/app/oracle/product/8.1.7:Y

El siguiente script verifica todas las bases de datos listadas en el archivo oratab y determina el estado (arriba o abajo) de las bases de datos:

    ###################################################################
## ckinstance.ksh ##
###################################################################
ORATAB=/var/opt/oracle/oratab
echo "`date`   "
echo  "Oracle Database(s) Status `hostname` :n"

db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "#" | grep -v "*"`
pslist="`ps -ef | grep pmon`"
for i in $db ; do
echo  "$pslist" | grep  "ora_pmon_$i"  > /dev/null 2>$1
if (( $? )); then
echo "Oracle Instance - $i:       Down"
else
echo "Oracle Instance - $i:       Up"
fi
done

Utiliza lo siguiente para Haz que el script están ejecutable:

    $ chmod 744 ckinstance.ksh
$ ls -l ckinstance.ksh
-rwxr--r--   1 oracle     dba     657 Mar  5 22:59 ckinstance.ksh*

Aquí están un informe de disponibilidad de instancias:

    $ ckinstance.ksh
Mon Mar  4 10:44:12 PST 2002

Oracle Database(s) Status for DBHOST server:
Oracle Instance - oradb1:   Up
Oracle Instance - oradb2:   Up
Oracle Instance - oradb3:   Down
Oracle Instance - oradb4:   Up

Consulta la disponibilidad de Oracle Listener

Un script similar verifica para el oyente Oracle. Si el oyente está caído, el script reiniciará al oyente:

    #######################################################################
## cklsnr.sh                                                         ##
#######################################################################
#!/bin/ksh
DBALIST="[email protected], [email protected]";export DBALIST
cd /var/opt/oracle
rm -f lsnr.exist
ps -ef | grep mylsnr | grep -v grep  > lsnr.exist
if [ -s lsnr.exist ]
then
echo
else
echo "Alert" | mailx -s "Listener 'mylsnr' on `hostname` is down" $DBALIST
TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN
ORACLE_SID=db1; export ORACLE_SID
ORAENV_ASK=NO; export ORAENV_ASK
PATH=$PATH:/bin:/usr/local/bin; export PATH
. oraenv
LD_LIBRARY_PATH=${ORACLE_HOME}/lib;export LD_LIBRARY_PATH
lsnrctl start mylsnr
fi

Consulta los registros de alertas (ORA-XXXXX)

Algunas de las variables de entorno utilizadas por cada script pueden incluirse en un solo perfil:

    #######################################################################
## oracle.profile ##
#######################################################################
EDITOR=vi;export EDITOR ORACLE_BASE=/u01/app/oracle; export
ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/8.1.7; export
ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export
LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export
TNS_ADMIN NLS_LANG=american; export
NLS_LANG NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'; export
NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export
ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/
sbin:/usr/openwin/bin:/opt/bin:.; export
PATH DBALIST="[email protected], [email protected]";export
DBALIST

El siguiente script llama primero a oracle.profile para configurar todas las variables de entorno . El script también envía al DBA un correo electrónico de advertencia si encuentra algún error de Oracle:

    ####################################################################
## ckalertlog.sh                                                  ##
####################################################################
#!/bin/ksh
. /etc/oracle.profile
for SID in `cat $ORACLE_HOME/sidlist`
do
cd $ORACLE_BASE/admin/$SID/bdump
if [ -f alert_${SID}.log ]
then
mv alert_${SID}.log alert_work.log
touch alert_${SID}.log
cat alert_work.log >> alert_${SID}.hist
grep ORA- alert_work.log > alert.err
fi
if [ `cat alert.err|wc -l` -gt 0 ]
then
mailx -s "${SID} ORACLE ALERT ERRORS" $DBALIST < alert.err
fi
rm -f alert.err
rm -f alert_work.log
done

Limpiar registros archivados antiguos

El siguiente script limpia los registros antiguos de archivo si el sistema de archivos de registro alcanza el 90 por ciento de capacidad:

    $ df -k | grep arch
Filesystem                kbytes   used     avail    capacity  Mounted on
/dev/vx/dsk/proddg/archive 71123968 30210248 40594232   43%  /u08/archive

#######################################################################
## clean_arch.ksh                                                    ##
#######################################################################
#!/bin/ksh
df -k | grep arch > dfk.result
archive_filesystem=`awk  -F" "  '{ print $6 }' dfk.result`
archive_capacity=`awk  -F" "  '{ print $5 }' dfk.result`
if [[ $archive_capacity > 90% ] ]
then
echo "Filesystem ${archive_filesystem} is ${archive_capacity} filled"
# try one of the following option depend on your need
find $archive_filesystem -type f -mtime +2 -exec rm -r {} ;
tar
rman
fi

Analizar tablas e índices (para mejorar el rendimiento)

A continuación, he mostrado un ejemplo de cómo pasar parámetros a un script:

    ####################################################################
## analyze_table.sh ##
####################################################################
#!/bin/ksh #
input parameter: 1: password # 2: SID if (($#<1)) then echo "Please enter
'oracle'
user password as the first parameter !" exit 0 fi if (($#<2)) then echo
"Please enter
instance name as the second parameter!" exit 0 fi

To execute the script with parameters, type:

$ analyze_table.sh manager oradb1

La primera parte del script genera un archivo analyze.sql, que contiene la sintaxis para analizar la tabla. La segunda parte del script analiza todas las tablas:

    #####################################################################
## analyze_table.sh ##
#####################################################################
sqlplus -s <<!
oracle/$1@$2
set heading off
set feed off
set pagesize 200
set linesize 100
spool analyze_table.sql
select 'ANALYZE TABLE ' || owner || '.' || segment_name ||
' ESTIMATE STATISTICS SAMPLE 10 PERCENT;'
from dba_segments
where segment_type = 'TABLE'
and owner not in ('SYS', 'SYSTEM');
spool off
exit
!
sqlplus -s <<!
oracle/$1@$2
@./analyze_table.sql
exit
!

Aquí están un ejemplo de analyze.sql:

    $ cat analyze.sql
ANALYZE TABLE HIRWIN.JANUSAGE_SUMMARY ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE HIRWIN.JANUSER_PROFILE ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE APPSSYS.HIST_SYSTEM_ACTIVITY ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE HTOMEH.QUEST_IM_VERSION ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE JSTENZEL.HIST_SYS_ACT_0615 ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE JSTENZEL.HISTORY_SYSTEM_0614 ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE JSTENZEL.CALC_SUMMARY3 ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE IMON.QUEST_IM_LOCK_TREE ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE APPSSYS.HIST_USAGE_SUMMARY ESTIMATE STATISTICS SAMPLE 10 PERCENT;
ANALYZE TABLE PATROL.P$LOCKCONFLICTTX ESTIMATE STATISTICS SAMPLE 10 PERCENT;

Comprobar el uso del espacio de mesa

Este script comprueba el uso del espacio de mesa. Si el espacio de mesa está libre en un 10 %, enviará un correo electrónico de alerta.

    #####################################################################
## ck_tbsp.sh ##
#####################################################################
#!/bin/ksh
sqlplus -s <<!
oracle/$1@$2
set feed off
set linesize 100
set pagesize 200
spool tablespace.alert
SELECT F.TABLESPACE_NAME,
TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",
TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)",
TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",
TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE
FROM   (
SELECT       TABLESPACE_NAME,
ROUND (SUM (BLOCKS*(SELECT VALUE/1024
FROM V$PARAMETER
WHERE NAME = 'db_block_size')/1024)
) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
) F,
(
SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES/1048576)) TOTAL_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME
) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME
AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) < 10;
spool off
exit
!
if [ `cat tablespace.alert|wc -l` -gt 0 ]
then
cat tablespace.alert -l tablespace.alert > tablespace.tmp
mailx -s "TABLESPACE ALERT for ${2}" $DBALIST < tablespace.tmp
fi

Un ejemplo de la salida de correo de alerta están el siguiente:

    TABLESPACE_NAME     USED (MB)   FREE (MB)         TOTAL (MB)            PER_FREE
------------------- --------- ----------- ------------------- ------------------
SYSTEM              2,047             203               2,250                9 %
STBS01                302              25                327                 8 %
STBS02                241              11                252                 4 %
STBS03                233              19                252                 8 %

Averiguar objetos de base de datos inválidos

A continuación se identifican los objetos de base de datos inválidos:

    #####################################################################
## invalid_object_alert.sh ##
#####################################################################
#!/bin/ksh
. /etc/oracle.profile
sqlplus -s <<!
oracle/$1@$2
set          feed off
set heading off
column object_name format a30
spool invalid_object.alert
SELECT  OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS
FROM    DBA_OBJECTS
WHERE   STATUS = 'INVALID'
ORDER BY OWNER, OBJECT_TYPE, OBJECT_NAME;
spool off
exit
!
if [ `cat invalid_object.alert|wc -l` -gt 0 ]
then
mailx -s "INVALID OBJECTS for ${2}" $DBALIST < invalid_object.alert
fi
$ cat invalid_object.alert

OWNER        OBJECT_NAME           OBJECT_TYPE          STATUS
----------------------------------------------------------------------
HTOMEH       DBMS_SHARED_POOL            PACKAGE BODY          INVALID
HTOMEH       X_$KCBFWAIT                 VIEW                  INVALID
IMON         IW_MON                      PACKAGE               INVALID
IMON         IW_MON                      PACKAGE BODY          INVALID
IMON         IW_ARCHIVED_LOG             VIEW                  INVALID
IMON         IW_FILESTAT                 VIEW                  INVALID
IMON         IW_SQL_FULL_TEXT            VIEW                  INVALID
IMON         IW_SYSTEM_EVENT1            VIEW                  INVALID
IMON         IW_SYSTEM_EVENT_CAT         VIEW                  INVALID
LBAILEY      CHECK_TABLESPACE_USAGE      PROCEDURE             INVALID
PATROL       P$AUTO_EXTEND_TBSP          VIEW                  INVALID
SYS          DBMS_CRYPTO_TOOLKIT         PACKAGE               INVALID
SYS          DBMS_CRYPTO_TOOLKIT         PACKAGE BODY          INVALID
SYS          UPGRADE_SYSTEM_TYPES_TO_816 PROCEDURE             INVALID
SYS          AQ$_DEQUEUE_HISTORY_T       TYPE                  INVALID
SYS          HS_CLASS_CAPS               VIEW                  INVALID
SYS          HS_CLASS_DD                 VIEW                  INVALID

Supervisa usuarios y transacciones (bloqueos muertos, etc.)

Este script envía un correo electrónico de alerta si ocurre un bloqueo muerto:

    ###################################################################
## deadlock_alert.sh ##
###################################################################
#!/bin/ksh
. /etc/oracle.profile
sqlplus -s <<!
oracle/$1@$2
set feed off
set heading off
spool deadlock.alert
SELECT   SID, DECODE(BLOCK, 0, 'NO', 'YES' ) BLOCKER,
DECODE(REQUEST, 0, 'NO','YES' ) WAITER
FROM     V$LOCK
WHERE    REQUEST > 0 OR BLOCK > 0
ORDER BY block DESC;
spool off
exit
!
if [ `cat deadlock.alert|wc -l` -gt 0 ]
then
mailx -s "DEADLOCK ALERT for ${2}" $DBALIST < deadlock.alert
fi

Conclusión

    0,20,40 7-17 * * 1-5 /dba/scripts/ckinstance.sh > /dev/null 2>&1
0,20,40 7-17 * * 1-5 /dba/scripts/cklsnr.sh > /dev/null 2>&1
0,20,40 7-17 * * 1-5 /dba/scripts/ckalertlog.sh > /dev/null 2>&1
30         * * * 0-6 /dba/scripts/clean_arch.sh > /dev/null 2>&1
*          5 * * 1,3 /dba/scripts/analyze_table.sh > /dev/null 2>&1
*          5 * * 0-6 /dba/scripts/ck_tbsp.sh > /dev/null 2>&1
*          5 * * 0-6 /dba/scripts/invalid_object_alert.sh > /dev/null 2>&1
0,20,40 7-17 * * 1-5 /dba/scripts/deadlock_alert.sh > /dev/null 2>&1

Ventajas de usar scripting shell para la monitorización de bases de datos Oracle

Estos consejos y trucos ayudarán a te dominar las bases de datos de Oracle y eliminar el trabajo manual, aumentar la robustez del sistema y transformar un enfoque reactivo en uno proactivo.

Cuando te programa scripts para monitorizar tu base de datos Oracle, te puedes estar tranquilo te son ser eficiente con tus recursos y que tu base de datos están igual de eficiente, sin mencionar que es segura y muy accesible. te podrás dedicar más energía a afinar el rendimiento.

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.