Category: Oracle 12c

RAC 12c : CLSRSC-175: Failed to write the checkpoint 'ROOTCRS_STACK' with status 'FAIL'



Instalando un RAC 12c , me encontré con un error que nunca había visto y claro, se me hizo tan extraño que comencé a investigar y he aquí el resultado

Ya casi terminando con la instalación del Grid Infraestructure en un RAC 12c, aparece la siguiente pantalla de ejecución de shell





Al realizar la cuarta ejecución , especificamente el archivo /u01/app/12.1.0/grid/root.sh en el nodo 2, aparece el siguiente mensaje de error

2015/11/29 01:14:35 CLSRSC-175: Failed to write the checkpoint 'ROOTCRS_STACK' with status 'FAIL' (error code 1)
Died at /u01/app/12.1.0/grid/crs/install/crsutils.pm line 3740.

Output total


Para ver los errores que existen en nuestra instalación podemos ir a la carpeta $HOME_CRS/cfgtoollogs/crsconfig/ y allí buscamos por la hora el log que andamos buscando, pues dentro de ese archivo aparecía lo siguiente

Y buscamos ese log , dentro de ese archivo estaba lo que buscábamos, el error

Por otra parte buscando en el temporal , me encontré con un archivo llamado /tmp/tfa/20151129_011424/cat syserrorout.11.29.2015-01.12.23 , que contenía exactamente el error que tenía en mi instalación , un hostname erróneo

TFA es la sigla de Oracle Trace File Analyzer y es precisamente el módulo que trata de instalar cuando chequea el /etc/hostname

Esto me parecía extraño , ya que el runcluvfy no tenía casi errores, sólo algunos warnings por NTP y el instalador mismo no me arrojo warnings relativos al hostname, la creación de certificados fue la adecuada por ende el error estaba en otro lado

Por lo mismo comencé a chequear la instalación del sistema operativo y ejecute un simple comando en el nodo2

El comando hostname me arrojaba un nombre de host erróneo, y era por el contenido del archivo /etc/hostname , lo cambie al valor adecuado y reejecute el script faltante en el nodo /u01/app/12.1.0/grid/root.sh

Y allí estaba, la instalación fue un éxito y sólo por un error, que ni siquiera me había dado cuenta que cometí |-|

Espero no se encuentren con esto :D y si lo hacen , ya saben como operar

by Ligarius
15.12.15. 05:57:26. 362 words, 10607 views. Categories: Oracle 12c, Real Application Cluster ,

Oracle 12c New Features : SQL Loader Express



Siempre lo más complicado de cargar datos mediante SQL Loader, es general el archivo de control.. pues bien, eso hoy tiene una solución rápida y sencilla



Imaginate una situación así.

- Un archivo CSV con la siguiente estructura si lo abrimos mediante un notepad


- Y si lo vemos a través de Microsoft Excel


Pues bien , generar el archivo de control , debería ser algo así

OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'objetos.csv'
APPEND
INTO TABLE OBJETOS
FIELDS TERMINATED BY ","
(
NOMBRE,
EDAD,
DIRECCION
)


Esto podría ser sencillo para un archivo más pequeño, pero imagínense un archivo más grande, con muchos más campos o estructuras más complejas, en esta actividad, en crear el archivo CTL podemos ocupar varias horas, con pruebas y errores.

Pues bien.. desde Oracle 12c, existe una característica que nos permite realizar la carga de un archivo sin necesidad del archivo de control, esta característica se llama SQL LOADER EXPRESS.

¿Cómo funciona? Pues bien, mediante ejemplos probaremos su funcinamiento

- Ejecutamos el comando de la forma más básica

sqlldr usuario/password tabla=nombre_tabla


Con lo anterior , se cumplirá lo siguiente :

- SQL Loader tratará de cargar un archivo llamado nombre_tabla.dat, es lo que buscará mediante la creación de una tabla externa.
- SQL Loader asumirá los campos y tipos que posea la tabla nombre_tabla dentro de nuestra base de datos.
- Se generará por defecto un archivo de control, esto lo podemos ver si buscamos en el archivo nombre_tabla.log
- Si existen registros malos, que no se puedan cargar, se creará por defecto un archivo llamado nombre_tabla.bad
- El formato de las fechas está dado por el seteo NLS existente, el sabrá si se asume YYYY-MM-DD o DD-MM-YYYY.
- Si la tabla posee datos, SQL Loader simplemente cargará los datos al final de los registros existentes (APPEND).

Si quisieramos cargar los datos expuestos en las primeras líneas, simplemente deberíamos ejecutar el comando

sqlldr usuario/pwd table=objetos data=objetos.csv

Y el comando generaría el siguiente archivo de log

SQL*Loader: Release 12.1.0.2.0 - Production on Sáb Ago 22 19:23:49 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Express Mode Load, Table: OBJETOS
Data File:      objetos.csv
  Bad File:     objetos_%p.bad
  Discard File:  none specified
 
 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation:    none specified
Path used:      External Table

Table OBJETOS, loaded from every logical record.
Insert option in effect for this table: APPEND

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
NOMBRE                              FIRST     *   ,       CHARACTER            
EDAD                                 NEXT     *   ,       CHARACTER            
DIRECCION                            NEXT     *   ,       CHARACTER            

Generated control file for possible reuse:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'objetos.csv'
APPEND
INTO TABLE OBJETOS
FIELDS TERMINATED BY ","
(
  NOMBRE,
  EDAD,
  DIRECCION
)
End of generated control file for possible reuse.

created temporary directory object SYS_SQLLDR_XT_TMPDIR_00000 for path C:\Hector

enable parallel DML: ALTER SESSION ENABLE PARALLEL DML

creating external table "SYS_SQLLDR_X_EXT_OBJETOS"

CREATE TABLE "SYS_SQLLDR_X_EXT_OBJETOS" 
(
  "NOMBRE" VARCHAR2(100),
  "EDAD" NUMBER,
  "DIRECCION" VARCHAR2(100)
)
ORGANIZATION external 
(
  TYPE oracle_loader
  DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
  ACCESS PARAMETERS 
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
    BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'objetos_%p.bad'
    LOGFILE 'objetos_%p.log_xt'
    READSIZE 1048576
    FIELDS TERMINATED BY "," LRTRIM 
    REJECT ROWS WITH ALL NULL FIELDS 
    (
      "NOMBRE" CHAR(255),
      "EDAD" CHAR(255),
      "DIRECCION" CHAR(255)
    )
  )
  location 
  (
    'objetos.csv'
  )
)REJECT LIMIT UNLIMITED

executing INSERT statement to load database table OBJETOS

INSERT /*+ append parallel(auto) */ INTO OBJETOS 
(
  NOMBRE,
  EDAD,
  DIRECCION
)
SELECT 
  "NOMBRE",
  "EDAD",
  "DIRECCION"
FROM "SYS_SQLLDR_X_EXT_OBJETOS"

dropping external table "SYS_SQLLDR_X_EXT_OBJETOS"

Table OBJETOS:
  4 Rows successfully loaded.

Run began on Sáb Ago 22 19:23:49 2015
Run ended on Sáb Ago 22 19:23:50 2015

Elapsed time was:     00:00:00.82
CPU time was:         00:00:00.03

La documentación
http://www.oracle.com/technetwork/database/enterprise-edition/learnmore/sqlldr-express-mode-wp-1991038.pdf

Espero les sirva

by Ligarius
22.08.15. 17:33:16. 664 words, 4972 views. Categories: Oracle 12c , • Send a trackback »

Oracle 12c New Features : Comando VALIDATE de RMAN



En Oracle 12c existe un comando que nos puede hacer la vida muy sencilla, o ayudar en que sea más placentera.



El comando VALIDATE para RMAN (Recovery Manager), este comando puede hacer variadas cosas de utilidad para realizar chequeo de corrupción a nivel lógico de bloques (intrablock, o internamente de un sólo bloque) , como a nivel físico de bloques (interblock, o entre bloques).

Cada vez que se ejecuta el comando VALIDATE se chequea de forma manual alguna corrupción lógica o física , cada vez que ejecutamos una validación de por lo menos un datafile, RMAN chequea cada uno de los bloques del archivo y si en este análisis encuentra un bloque corrupto lógica o físicamente , se procede a actualizar la vista V$DATABASE_BLOCK_CORRUPTION, en esta vista queda inscrito el bloque que presenta problemas.

Lo que contiene el presente post.

  • Validación de datafiles
  • Validación de algún bloque en partícular de una datafile
  • Validación de base de datos completa
  • Validación de backupsets
  • Validación por secciones de datafiles

    El detalle de lo comentado :

  • Validación de datafiles : Para realizar el chequeo completo de un datafile, se ejecuta el siguiente comando, el cual arroja entre otras cosas la cantidad de bloques examinados y el valor del SCN más alto encontrado.

    VALIDATE DATAFILE "número datafile";

    Salida del comando :

    RMAN> validate datafile 1;

    Starting validate at 30/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00001 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\O1_MF_SYSTEM_BDONOH43_.DBF
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:15

    List of Datafiles
    =================
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    1    OK     0              18958        104974          18064429
      File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\O1_MF_SYSTEM_BDONOH43_.DBF
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              68354
      Index      0              13822
      Other      0              3826

    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    including current control file for validation
    including current SPFILE in backup set
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    List of Control File and SPFILE
    ===============================
    File Type Status Blocks Failing Blocks Examined
    ------------ ------ -------------- ---------------
    SPFILE OK 0 2
    Control File OK 0 612
    Finished validate at 30/05/15

    RMAN>



  • Validación de algún bloque en partícular de una datafile : También se puede realizar el chequeo de un sólo bloque dentro de un datafile, quizás por que en el archivo de alertas o un aplicativo nos indico que allí existe una corrupción.

    VALIDATE DATAFILE "número datafile" block "número de bloque";

    Salida del comando :

    RMAN> validate datafile 7 block 1;

    Starting validate at 30/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    List of Datafiles
    =================

    
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    7    OK     0              0            1               0
      File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              0
      Index      0              0
      Other      0              1
    

    Finished validate at 30/05/15





  • Validación de base de datos completa : En la validación de la base de datos completa, simplemente se le indica que el VALIDATE será a nivel de base y el genera un informe con todos los bloques que ha recorrido y a que datafile corresponde.

    VALIDATE DATABASE;

    Salida del comando :

    RMAN> validate database;

    Starting validate at 30/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    ****Muestra todos los datafiles que están siendo analizados

    channel ORA_DISK_1: validation complete, elapsed time: 00:01:05

    **** Muestra un resumen por cada uno de los datafiles que han sido analizados, mostrando la cantidad de bloques procesados, con problemas y el tipo de bloques.


    List of Datafiles
    =================
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    7 OK 0 129369 131072 18061221
    File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    Block Type Blocks Failing Blocks Processed
    ---------- -------------- ----------------
    Data 0 1542
    Index 0 0
    Other 0 161



  • Validación de backupsets : Se le puede indicar un número de backupsets para que sea analizado y nos muestra la misma información que los comandos anteriores, por ejemplo, la cantidad de bloques que ha leído y el máximo SCN que posee el datafile, con esto podemos validar que nuestro backupset es válido para realizar una restauración.

    VALIDATE BACKUPSET "número backupset" ;

    Salida del comando :

    RMAN> validate backupset 1;

    Starting validate at 31/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile backup set
    channel ORA_DISK_1: reading from backup piece C:\ORACLE12C\FAST_RECOVERY_AREA\PROD12C\BACKUPSET\2015_05_30\O1_MF_NNNDF_TAG20150530T205937_BPNMQ9WG_.BKP
    channel ORA_DISK_1: piece handle=C:\ORACLE12C\FAST_RECOVERY_AREA\PROD12C\BACKUPSET\2015_05_30\O1_MF_NNNDF_TAG20150530T205937_BPNMQ9WG_.BKP tag=TAG20150530
    7
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:15
    Finished validate at 31/05/15

    RMAN>



  • Validación por secciones de datafiles : Podemos realizar la validación de un datafile , pero si este es muy grande , podemos dividir el trabajo en canales por paralelo, simplemente indicando un número o tamaño de sección para el datafile. Imaginense que poseen un sólo datafile de 100GB, pues bien un sólo canal será capaz de tomarlo y procesarlo, pero si lo dividimos en secciones de 10Gb, podríamos tener hasta 10 canales procesando las 10 partes de nuestro gran datafile.

    RUN
    {
    *** Se declaran los canales que serán utilizados para que en paralelo se tome un sólo datafile
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK;

    *** Se le indica el tamaño de la sección a analizar por cada canal generado
    VALIDATE DATAFILE 7 SECTION SIZE 200M;
    }

    Salida del comando :

    RMAN> run
    2> {
    3> allocate channel c1 device type disk;
    4> allocate channel c2 device type disk;
    5> allocate channel c3 device type disk;
    6> validate datafile 7 section size 200m;
    7> }

    released channel: ORA_DISK_1
    allocated channel: c1
    channel c1: SID=7 device type=DISK

    allocated channel: c2
    channel c2: SID=367 device type=DISK

    allocated channel: c3
    channel c3: SID=6 device type=DISK

    *** Se muestran todas las secciones que serán analizadas por cada canal declarado en RMAN
    Starting validate at 30/05/15
    channel c1: starting validation of datafile
    channel c1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 1 through 25600
    channel c2: starting validation of datafile
    channel c2: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 25601 through 51200
    channel c3: starting validation of datafile
    channel c3: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 51201 through 76800
    channel c1: validation complete, elapsed time: 00:00:08
    channel c1: starting validation of datafile
    channel c1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 76801 through 102400
    channel c2: validation complete, elapsed time: 00:00:09
    channel c2: starting validation of datafile
    channel c2: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 102401 through 128000
    channel c1: validation complete, elapsed time: 00:00:03
    channel c1: starting validation of datafile
    channel c1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 128001 through 131072
    channel c3: validation complete, elapsed time: 00:00:11
    channel c2: validation complete, elapsed time: 00:00:04
    channel c1: validation complete, elapsed time: 00:00:01
    List of Datafiles
    =================

    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    7    OK     0              129369       131067          18061221
      File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              1542
      Index      0              0
      Other      0              156

    Finished validate at 30/05/15
    released channel: c1
    released channel: c2
    released channel: c3




    En definitiva, el comando VALIDATE es muy poderoso para realizas chequeos rápidos y certeros sobre las condiciones de nuestros respaldos y de nuestras bases de datos, buscando de manera óptima los posibles bloques corruptos, ya sea , física como lógicamente.

    Documentación del comando VALIDATE
    https://docs.oracle.com/database/121/BRADV/rcmvalid.htm#BRADV90063
    https://docs.oracle.com/database/121/RCMRF/rcmsynta2025.htm#RCMRF162

  • by Ligarius
    30.05.15. 21:24:20. 1427 words, 5743 views. Categories: Oracle 12c, RMAN (Recovery Manager) ,

    Chequeo y configuración de Oracle EM Express 12c (Enterprise Manager Express)



    ¿Qué es EM Express 12c?



    Enterprise Manager Express o comúnmente llamado EM Express, es una pieza de software que nació en Oracle12c, es una herramienta que sirve para realizar monitoreo a la base de datos mediante una interfaz WEB , la gracia principal de este EM Express es que está construida internamente en la base de datos Oracle y sólo utiliza estructuras internas de la base para su ejecución, por ejemplo el esquema XDB y SQL*Net.

    No requiere de ningún componente de Midle-Tier como por ejemplo Weblogic, no tiene repositorio de datos como un esquema sysman para Grid Control, tampoco tiene un componente instalado que pueda ser encontrado en la tabla DBA_REGISTRY, no tiene ni un proceso background asociado, todo lo anterior hace que sea una herramienta muy liviana que sólo obtiene datos desde la mísmisima base de datos. Si la base de datos no está abierta, pues simplemente está herramienta no funciona.

    Si deseas utilizarla y te diste cuenta que no funciona, pues he acá la receta de como dejarla habilitada :

    1.- Chequeamos cual es la URL de nuestra instalación de EM Express, para ello podemos ejecutar uno de los siguientes comandos, tanto para la conexión HTTP, como para la conexión HTTPS

    Para HTTPS :

    SQL> SELECT 'https://'||SYS_CONTEXT('USERENV','SERVER_HOST')||'.'||SYS_CONTEXT('USERENV','DB_DOMAIN')||':'||dbms_xdb_config.gethttpsport()||'/em/' from dual;
    SQL> SELECT 'https://'||SYS_CONTEXT('USERENV','SERVER_HOST')||':'||dbms_xdb_config.gethttpsport()||'/em/' from dual;

    Para HTTP :

    SQL> SELECT 'http://'||SYS_CONTEXT('USERENV','SERVER_HOST')||'.'||SYS_CONTEXT('USERENV','DB_DOMAIN')||':'||dbms_xdb_config.gethttpport()||'/em/' from dual;
    SQL> SELECT 'http://'||SYS_CONTEXT('USERENV','SERVER_HOST')||':'||dbms_xdb_config.gethttpport()||'/em/' from dual;



    Ejemplo de resultados de las consultas :

    SQL> SELECT 'https://'||SYS_CONTEXT('USERENV','SERVER_HOST')||':'||dbms_xdb_config.gethttpsport()||'/em/' from dual;

    'HTTPS://'||SYS_CONTEXT('USERENV','SERVER_HOST')||':'||DBMS_XDB_CONFIG.GETHTTPSPORT()||'/EM/'
    --------------------------------------------------------------------------------------------------------------------
    https://ligarius-note:5500/em/



    2.- Ejecutamos esta URL en nuestro Browser favorito (Google Chrome) y si no resulta, pues continuamos con los siguientes pasos :



    3.- Chequeamos el puerto que está utilizando nuestro servicio de listener

    Si es distinto al 1521 (puerto por defecto), tenemos que configurar el parámetro LOCAL_LISTENER con la entrada correcta del TNSNAMES, la cual debe estar apuntando a este listener, he aquí el ejemplo :

    TNSNAMES que apunta al correcto puerto de nuestro listener .

    PROD12C =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = Ligarius-Note)(PORT = 1525))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = prod12c)
    )
    )


    Nos cercioramos que funcione haciendo un "tnsping PROD12C"


    Seteamos el valor a LOCAL_LISTENER

    SQL> alter system set local_listener=PROD12C scope=both;

    System altered.


    4.- Validamos la nueva entrada de servicio en el listener que está en ejecución


    Para esto se debe tener en cuenta reiniciar el listener.


    5.- Habilitar los Dispatchers, para ello se debe agregar la siguiente línea al archivo de inicialización de la base de datos.

    dispatchers="(PROTOCOL=TCP)(SERVICE=XDB )"

    Donde sid es el nombre de la base de datos.

    ando :

    SQL> alter system set dispatchers="(PROTOCOL=TCP)(SERVICE=prod12cXDB )";
    System altered.

    SQL> show parameter dispatcher

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    dispatchers string (PROTOCOL=TCP)(SERVICE=prod12cXDB )


    6.- Resetamos el puerto donde escuchará nuestro EM Express, esto lo debemos hacer con el usuario SYS

    exec DBMS_XDB_CONFIG.SETHTTPSPORT(5500);
    exec DBMS_XDB_CONFIG.SETHTTPPORT(4500);

    Obs : Deben saber bien que puertos utilizar..


    7.- Se chequea que la opción de XML este disponible en la base de datos y de que no haya objetos inválidos asociados.Para ello ejecutamos las siguientes consultas :

    col comp_name for a20
    col version for a15

    SQL> select comp_name, version, status from dba_registry where comp_id = 'XDB';

    SQL> select owner, object_name, object_type, status from dba_objects where status = 'INVALID' and owner in ('SYS', 'XDB');




    8.- Después de lo anterior, simplemente ingresamos la URL y disfrutamos de nuestra consola de EM Express

    En este link encontrarán la nota Oracle dedicada a los problemas con EM Express 12, se los adjunto como PDF

    Troubleshooting Why EM Express is not Working (Doc ID 1604062.1)



    Espero les sirva..

    by Ligarius
    09.09.14. 12:44:29. 724 words, 15149 views. Categories: Oracle 12c ,

    Información importante en AWR : Operating System Statistics



    Una parte importante para analizar en un reporte de AWR , es lo que corresponde a estadísticas de Sistema Operativo, aunque esto se puede sacar de múltiples formas, como por ejemplo el comando sar, prstat, top , etc,etc.

    Pero como está disponible en Oracle a través de un reporte de AWR, sería necesario que supieramos al menos de que se trata, he acá un pequeño resumen de lo que significa ese bloque de datos.

    Un ejemplo de estadísticas de sistema operativo



    1.- AVG_BUSY_TIME = Es el cálculo de BUSY_TIME/NUM_CPUS
    2.- AVG_IDLE_TIME = Es el cálculo de IDLE_TIME/NUM_CPUS
    3.- AVG_IOWAIT_TIME = Es el cálculo de IOWAIT_TIME/NUM_CPUS
    4.- AVG_SYS_TIME = Es el cálculo de SYS_TIME/NUM_CPUS
    5.- AVG_USER_TIME = Es el cálculo de USER_TIME/NUM_CPUS

    6.- BUSY_TIME = Es un tiempo equivalente a %usr + %sys en un comando sar , la diferencia está que el comando sar lo expresa en porcentajes y acá se expresa en unidades.
    7.- IDLE_TIME = Es un tiempo equivalente a %idle en un comando sar, la diferencia está que el comando sar lo expresa en porcentajes y acá se expresa en unidades.
    8.- IOWAIT_TIME = Es un tiempo equivalente a %wio en un comando sar, la diferencia está que el comando sar lo expresa en porcentajes y acá se expresa en unidades.
    9.- SYS_TIME = Es un tiempo equivalente a %sys en un comando sar, la diferencia está que el comando sar lo expresa en porcentajes y acá se expresa en unidades.
    10.- USER_TIME = Es un tiempo equivalente a %usr en un comando sar, la diferencia está que el comando sar lo expresa en porcentajes y acá se expresa en unidades.

    %usr : Es el porcentaje de tiempo de la CPU que es gastada en procesos de usuarios, como aplicaciones , shell scripts o interactuando con el usuario
    %idle : Es el porcentaje de tiempo de la CPU en que no hay ninguna actividad .
    %wio : Es el porcentaje de tiempo de la CPU en que se está a la espera de una lectura o escritura de un bloque en sistema operativo, por ejemplo, tratando de leer un disco.
    %sys : Este porcentaje de tiempo de uso de la CPU está relacionado a la ejecución de las tareas de Kernel (S.O.).


    Esta información puede ser obtenida con el comando sar, ejemplo sar -u 1 10 , quiere decir que sacará estadísticas de sistema operativo cada 1 segundo , 100 repeticiones.

    Salida de referencia :

    $ sar -u 1 10

    HP-UX Poseus B.11.31 U ia64 08/26/13

    13:00:46 %usr %sys %wio %idle
    13:00:47 89 6 5 0
    13:00:48 81 4 15 0
    13:00:49 78 13 9 0
    13:00:50 78 21 1 0
    13:00:51 76 22 2 0
    13:00:52 85 13 2 0
    13:00:53 88 7 5 0
    13:00:54 75 11 13 1
    13:00:55 61 8 29 2
    13:00:56 57 4 35 4

    Average 77 11 12 1


    11.- LOAD = Significado no es claro, por ende se deja de lado en los análisis (incluso esto aparece en las notas oficiales de Oracle)

    12.- OS_CPU_WAIT_TIME = El tiempo de espera en las colas de ejecución (dato no claro de acuerdo a las notas de Oracle)
    13.- RSRC_MGR_CPU_WAIT_TIME = Tiempo de espera en los Resource Manager
    14.- PHYSICAL_MEMORY_BYTES = Total de memoria usada
    15.- NUM_CPUS = Número de CPUs reportadas por el Sistema Operativo

    Casi todas las cantidades expresadas están en centésimas segundos...por ende si se requiere cambiar para llevar a porcentajes, se puede hacer de la siguiente forma.

    ELAPSED TIME = SYS_TIME + USER_TIME + IDLE_TIME + IOWAIT_TIME

    O sea

    ELAPSED TIME = 39948702 + 6304516 + 74707066 + 0
    ELAPSED TIME = 120960284


    El cálculo de "ELAPSED TIME" debe ser muy parecido a la cantidad de segundos que fueron contemplados dentro del informe de AWR, esto lo podemos ver al inicio del reporte

    Snap Id Snap Time Sessions Cursors/Session
    Begin Snap: 41607 05-Aug-13 00:00:24 1913 3.0
    End Snap: 41628 05-Aug-13 21:00:19 51 3.3
    Elapsed: 1,259.91 (mins)
    DB Time: 1,116.03 (mins)

    "ELAPSED TIME" = (Cantidad de minutos desde el Snap inicial al final) * 60 seg. por minuto * Número de CPUs
    "ELAPSED TIME" = 1259.91 * 60 * 16
    "ELAPSED TIME" = 1209513.6


    Como ya tenemos "ELAPSED TIME" derivado del cálculo de SYS_TIME + USER_TIME + IDLE_TIME + IOWAIT_TIME , podemos realizar los cálculos del porcentaje...

    ELAPSED TIME = 120960284


    Ejemplo

    %busy ={(BUSY_TIME / "ELAPSED TIME" )} * 100
    %busy ={([USER_TIME + SYS_TIME] / "ELAPSED TIME" ) } * 100
    %busy = {([6304516 + 39948702] / 120960284)} * 100
    %busy = {46253218 / 120960284} * 100
    %busy = 0.38 * 100
    %busy = 38


    En Oracle 12c , se agrega un nuevo bloque de datos en el AWR, la información que aquí aparece es similar a la salida del comando "sar -u" y muestra la carga que tuvo la base de datos
    a nivel de CPU

    Espero les sirva

    by Ligarius
    26.08.13. 16:00:12. 726 words, 6973 views. Categories: Tuning / Performance, Oracle 12c ,

    1 2 3 4 5 >>