15 de agosto de 2014

ORA-01144: File size (12800000 blocks) exceeds maximum of 4194303 blocks

Hoy durante la creación de un Tablespace con tres datafiles de 100G en mi base de datos se generó el error "ORA-01144: File size (12800000 blocks) exceeds maximum of 4194303 blocks". Es por eso que se analiza el error y se describe como resolver el problema.

Oracle tiene limites con el db_block_size, dependiendo del db_block_size se puede crear datafiles hasta un tamaño en especifico, como se detalla a continuacion:
db_block_size    Datafile upper limit
-------------     --------------------
2kb               8GB
4kb               16GB
8kb               32GB
16kb              64GB
32kb              128GB
Revisando el parámetro en la base de datos se tiene lo siguiente:
SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
----------------------------------   ---------   ---------------
db_block_size                        integer     8192
Su valor corresponde a 8kb, por lo tanto el tamaño máximo para crear un datafile es definido por la formula db_block_size*4194303 (expresado en bits), en el escenario presentado solo puedo crear datafile de tamaño maximo hasta de 32Gb.

La solución para este escenario consiste en crear múltiples datafiles para el tablespace mencionado con un tamaño más pequeño o igual al soportado. La otra alternativa es utilizar tablespaces de archivo grande (Bigfile tablespaces).

Paulo Ticona

Referencias:
http://docs.oracle.com/cd/E11882_01/server.112/e25513/limits002.htm#REFRN0042

14 de agosto de 2014

Parametros ocultos o no documentados

Oracle tiene dos tipos de parámetros de Inicialización:
1) Parámetros de Inicialización Documentados.
2) Parámetros de Inicialización No Documentados.

El segundo tipo de Parámetros también es llamado Parámetro de Inicialización Ocultos y no existe documentación disponible acerca de esos parámetros. Por lo general la modificación de estos parámetros se lo realizan bajo la recomendación de Oracle Support.

Para visualizar los parámetros no documentados es necesario visualizar con la tabla "X$KSPPI" que contiene a todos los parámetros que influyen en la operación de una base de datos Oracle. Recordar que "X$tablas" solo puede ser utilizada cuando nos conectamos a la instancia como usuario "SYS".

A continuación se detalla el script para visualizar las parámetros no documentados y con que valor esta asignado en nuestra base de datos.
SET LINE 200
SET PAGES 100
COLUMN name FORMAT a30
COLUMN value FORMAT a20
COLUMN deflt FORMAT a20
COLUMN type FORMAT a20
COLUMN description FORMAT a50

  SELECT a.ksppinm name,
         b.ksppstvl VALUE,
         b.ksppstdf deflt,
         DECODE (a.ksppity,
                 1, 'boolean',
                 2, 'string',
                 3, 'number',
                 4, 'file',
                 a.ksppity)
            TYPE,
         a.ksppdesc description
    FROM sys.x$ksppi a, sys.x$ksppcv b
  WHERE     a.ksppinm LIKE '_use_adaptive_log_file_sync'
         AND a.indx = b.indx
         AND a.ksppinm LIKE '\_%' ESCAPE '\'
ORDER BY name;
Paulo Ticona

Fuentes:
http://www.toadworld.com/platforms/oracle/w/wiki/558.oracle-undocumented-parameters.aspx
http://www.oradba.ch/2012/01/oracle-hidden-init-ora-parameter/


8 de agosto de 2014

Eliminando y creando grupos Online Redolog

Se realizará la eliminación (DROP) y creación (CREATE) de grupo de archivos Online RedoLog. Nuestro escenario actual es el siguiente:
SQL> select GROUP#, STATUS, members, BYTES/1024/1024 MB, THREAD# from v$log;

    GROUP# STATUS              MEMBERS         MB    THREAD#
---------- ---------------- ---------- ---------- ----------
         4 CURRENT                   1         50          1
         5 INACTIVE                  1         50          1
         6 INACTIVE                  1         50          1

SQL> set pages 100
SQL> column status format a10
SQL> column member format a50
SQL> select group#, status, type, member from v$logfile;

    GROUP# STATUS     TYPE    MEMBER
---------- ---------- ------- --------------------------------------------------
         4            ONLINE  +REDO/sin/onlinelog/group_4.256.838035233
         5            ONLINE  +REDO/sin/onlinelog/group_5.257.838035233
         6            ONLINE  +REDO/sin/onlinelog/group_6.258.838035235

3 rows selected.
Realizaremos la creación de nuevos GRUPOS REDOLOG y eliminaremos los actuales por dos motivos principales:
1. Se Multiplexará e incrementará (de 50Mb a 1024Mb) el tamaño a los miembros de los grupos ONLINE REDOLOG en diferentes diskgroups, y cada grupo tendrá 2 miembros
2. Se eliminará a los actuales GRUPOS ONLINE REDOLOG existentes (grupos 4, 5 y 6).

a) Creación de GRUPOS ONLINE REDOLOG, con miembros ya multiplexados
SQL> ALTER DATABASE ADD LOGFILE GROUP 11 ('+REDO', '+FRA') SIZE 1024M;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE GROUP 12 ('+REDO', '+FRA') SIZE 1024M;

Database altered.
b) Creación de GRUPO ONLINE REDOLOG con un solo miembro y adicionamos su nuevo miembro.
Creamos:
SQL> ALTER DATABASE ADD LOGFILE GROUP 13 ('+REDO') SIZE 1024M;

Database altered.
Adicionamos:
SQL> ALTER DATABASE ADD LOGFILE MEMBER '+FRA' TO GROUP 13;

Database altered.
c) Eliminación de GRUPOS ONLINE REDOLOG. 
Antes de eliminar ejecutamos lo siguiente:
SQL> select GROUP#, STATUS, members, BYTES/1024/1024 MB, THREAD# from v$log;

    GROUP# STATUS        MEMBERS         MB    THREAD#
---------- ---------- ---------- ---------- ----------
         4 INACTIVE            1         50          1
         5 INACTIVE            1         50          1
         6 CURRENT             1         50          1
        11 UNUSED              2       1024          1
        12 UNUSED              2       1024          1
        13 UNUSED              2       1024          1

6 rows selected.
Eliminamos:
SQL> ALTER DATABASE DROP LOGFILE GROUP 4;

Database altered.

SQL> ALTER DATABASE DROP LOGFILE GROUP 5;

Database altered.

SQL> ALTER DATABASE DROP LOGFILE GROUP 6;
ALTER DATABASE DROP LOGFILE GROUP 6
*
ERROR at line 1:
ORA-01623: log 6 is current log for instance sin (thread 1) - cannot drop
ORA-00312: online log 6 thread 1: '+REDO/sin/onlinelog/group_6.258.838035235'
Oracle jamás permitirá que se eliminen los grupos ONLINE REDOLOG con status "CURRENT", por lo que se necesita realizar el cambio de grupo. Ejecutamos la siguiente sentencia:
SQL> ALTER SYSTEM SWITCH LOGFILE;

System altered.
Con la anterior instrucción realizamos el cambio de grupo, y es posible que el estado aun permanezca con status "ACTIVE", es preferible esperar un lapso de tiempo para que pase al estado de "INACTIVE", de tal manera queda en lo siguiente:
SQL> select GROUP#, STATUS, members, BYTES/1024/1024 MB, THREAD# from v$log;

    GROUP# STATUS        MEMBERS         MB    THREAD#
---------- ---------- ---------- ---------- ----------
         6 INACTIVE            1         50          1
        11 CURRENT             2       1024          1
        12 UNUSED              2       1024          1
        13 UNUSED              2       1024          1
Ejecutamos nuevamente la instrucción para eliminar el grupo ONLINE REDOLOG
SQL> ALTER DATABASE DROP LOGFILE GROUP 6;

Database altered.
Con los pasos mencionados se concluye la eliminación y creación de GRUPOS ONLINE REDOLOG, el resultado final es el siguiente:
SQL> select GROUP#, STATUS, members, BYTES/1024/1024 MB, THREAD# from v$log;

    GROUP# STATUS        MEMBERS         MB    THREAD#
---------- ---------- ---------- ---------- ----------
        11 CURRENT             2       1024          1
        12 UNUSED              2       1024          1
        13 UNUSED              2       1024          1

SQL> select group#, status, type, member from v$logfile;

    GROUP# STATUS     TYPE    MEMBER
---------- ---------- ------- --------------------------------------------------
        11            ONLINE  +REDO/sin/onlinelog/group_11.263.855075567
        11            ONLINE  +FRA/sin/onlinelog/group_11.263.855075583
        12            ONLINE  +REDO/sin/onlinelog/group_12.264.855075605
        12            ONLINE  +FRA/sin/onlinelog/group_12.264.855075623
        13            ONLINE  +REDO/sin/onlinelog/group_13.265.855075747
        13 INVALID    ONLINE  +FRA/sin/onlinelog/group_13.265.855075835

6 rows selected.

Paulo Ticona.

Fuentes:
http://docs.oracle.com/cd/E11882_01/server.112/e25494/onlineredo.htm#ADMIN007

30 de julio de 2014

Administrando ASM - Disk Groups

Este post estará dedicado a la parte de administración de Disk Groups en ASM, recordar que las operaciones se las debe realizar con la instancia +ASM (o con el que se tenga en el ambiente) y las variables de entorno necesarias (ORACLE_SID, ORACLE_HOME, PATH).

A continuación se detallan algunas sentencias importantes:

Como primer paso indispensable es conectarse a la instancia +ASM.
bash-3.2$ . oraenv
ORACLE_SID = [orcl] ? +ASM
The Oracle base remains unchanged with value /u01/app/oracle
bash-3.2$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 30 17:12:10 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Automatic Storage Management option
1. Script para visualizar los Disk Groups
SQL> select group_number, name, state, type, total_mb, free_mb from v$asm_diskgroup;

GROUP_NUMBER NAME                 STATE       TYPE     TOTAL_MB    FREE_MB
------------ -------------------- ----------- ------ ---------- ----------
           1 DATA                 MOUNTED     EXTERN      20394      20332
           2 FRA                  MOUNTED     EXTERN      20442      10281
           3 REDO1                MOUNTED     EXTERN       5100       5041
           4 REDO2                MOUNTED     EXTERN       5100       5041
2. Script para visualizar los Disks
column PATH format a20
column NAME format a20
SQL> select GROUP_NUMBER, PATH, NAME, TOTAL_MB, FREE_MB from v$asm_disk;

GROUP_NUMBER PATH                 NAME                   TOTAL_MB    FREE_MB
------------ -------------------- -------------------- ---------- ----------
           0 /dev/rdsk/c1t0d0s0                                 0          0
           1 /dev/rdsk/c1t1d0s0   DATA_0000                 10189      10158
           1 /dev/rdsk/c1t2d0s0   DATA_0001                 10205      10174
           2 /dev/rdsk/c1t3d0s0   FRA_0000                  20442      10281
           3 /dev/rdsk/c1t4d0s0   REDO1_0000                 5100       5041
           4 /dev/rdsk/c1t5d0s0   REDO2_0000                 5100       5041

6 rows selected.
3. Script para visualizar los Disk Groups con sus correspondientes discos, y también los discos candidatos
column PATH format a20
column NAME format a20
set line 150
SQL> select dg.NAME, d.NAME, d.PATH, d.TOTAL_MB, d.FREE_MB from v$asm_disk d, v$asm_diskgroup dg where dg.group_number=d.group_number;

NAME                 NAME                 PATH                   TOTAL_MB    FREE_MB
-------------------- -------------------- -------------------- ---------- ----------
DATA                 DATA_0000            /dev/rdsk/c1t1d0s0        10189      10158
DATA                 DATA_0001            /dev/rdsk/c1t2d0s0        10205      10174
FRA                  FRA_0000             /dev/rdsk/c1t3d0s0        20442      10281
REDO1                REDO1_0000           /dev/rdsk/c1t4d0s0         5100       5041
REDO2                REDO2_0000           /dev/rdsk/c1t5d0s0         5100       5041
O alternativamente usar el siguiente script:
column disk_path format a20
column disk_name format a20
column diskgroup_name format a20
set line 150
SELECT
    NVL(a.name, '[CANDIDATO]')      diskgroup_name
  , b.path                          disk_path
  , b.name                          disk_name
  , b.free_mb                       
  , B.total_mb
FROM
    v$asm_diskgroup a RIGHT OUTER JOIN v$asm_disk b USING (group_number)
ORDER BY
    a.name;

DISKGROUP_NAME       DISK_PATH            DISK_NAME               FREE_MB   TOTAL_MB
-------------------- -------------------- -------------------- ---------- ----------
DATA                 /dev/rdsk/c1t2d0s0   DATA_0001                 10179      10205
DATA                 /dev/rdsk/c1t1d0s0   DATA_0000                 10163      10189
FRA                  /dev/rdsk/c1t3d0s0   FRA_0000                  20392      20442
REDO1                /dev/rdsk/c1t4d0s0   REDO1_0000                 5050       5100
REDO2                /dev/rdsk/c1t5d0s0   REDO2_0000                 5050       5100
[CANDIDATO]          /dev/rdsk/c1t0d0s0                                 0          0

6 rows selected.
4. Crear un Disk Group con un disco
CREATE DISKGROUP PRUEBA EXTERNAL REDUNDANCY DISK '/dev/rdsk/c1t3d0s0';
5. Adicionar Disco a un Disk Group
ALTER DISKGROUP DATA ADD DISK '/dev/rdsk/c1t2d0s0';
6. Montar un Disk Group
ALTER DISKGROUP DATA MOUNT;
7. Borrar Disco de un Disk Group
ALTER DISKGROUP DATA DROP DISK DATA_0001;
8. Desmontar un Disk Group
ALTER DISKGROUP DATA DISMOUNT;
9. Borrar un Disk Group
DROP DISKGROUP DATA;
10. Borrar un Disk Group y sus contenidos
DROP DISKGROUP DATA including contents;
Paulo Ticona :)

Fuentes:
http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmdiskgrps.htm#OSTMG10040
Oracle® Automatic Storage Management Administrator's Guide, 11g Release 2 (11.2), E18951-03

3 de julio de 2014

Instalación de Oracle Grid Infrastructure for Standalone y Oracle Database 11gR2.

En este post realizaremos los pasos para la instalación de Grid Infrastructure for standalone y Oracle Database 11gR2. Para realizar este procedimiento deberíamos tener previamente configurado los requisitos que son necesarios para la instalación, a continuación se describe lo que ya deberíamos tener:
Este escenario se dividira en dos secciones, primero instalamos Grid Infrastructure y luego Oracle Database. Nuestro ambiente tendrá en total 3 row devices, 2 discos de 4GB para el Disk Group +DATA y 1 disco de 5GB que será utilizado para el Disk Group +FRA.

Instalación de Oracle Grid Infrastructure
a)    Debemos estar conectados como usuario Oracle y tener copiado el instalador de infraestructura grid, ingresamos al directorio y ejecutamos runInstaller.
b)    Después aparecerá el interfaz con el que se comenzara la instalación.

c)    Elegimos la opción Grid Infrastructure for a Standalone Server.

 d)    Continuamos eligiendo el lenguaje. 

e)    Creamos el disk group DATA, eligiendo los dos discos de 4 GB y tipo de redundancia External.
 


f)    Se usara el mismo password (grid.123) para las cuentas SYS y ASMSNMP de la infraestructura GRID.
 


g)    Se elige los grupos del sistema operativo.

 h)    Especificamos la ruta de instalación de grid y ubicacion de Inventory.


 i)    Oracle revisa si la instalación cumple con todos lo prerequisitos establecidos.

 j)    Si todo esta correcto, pasara a la siguiente pantalla para comenzar la instalación.

 k)    Comenzará la instalación.

 l)    Durante la instalación se desplegara un mensaje en el cual pedirá ejecutar scripts como usuario root.

 

m)    Finaliza la instalación de GRID INFRAESTRUCTURE.


Instalación de Oracle Database

a)    Nos conectamos como usuario Oracle y debemos tener copiado el instalador de Oracle Database 11gR2, ingresamos al directorio y ejecutamos runInstaller.

b)    Aparecerá el interfaz con el que se comenzará la instalación.

c)    Omitimos las actualizaciones.

d)    Continuamos especificando que solo se desea instalar el software.

e)    Se elige la opción “Single instance”.

f)    Continuamos eligiendo el lenguaje.

g)    En este paso se elige la edición de la base de datos.

h)    Especificamos la ruta de instalación.

i)    Se elige los grupos del sistema operativo para la instalación.

j)    Si todo se encuentra correcto se mostrara un resumen antes de comenzar la instalación.

k)    Se realiza el proceso de la instalación.

l)    Durante la instalación aparecerá un mensaje en el cual pedirá ejecutar script como usuario root.

m)    Finaliza la instalación de Oracle Database 11gR2.

Con eso se concluye la instalación.



Paulo Ticona

Fuentes:
http://docs.oracle.com/cd/E11882_01/nav/portal_11.htm#solaris_installation_guides
Grid Infrastructure Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E47805-02
Database Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E48357-02

1 de julio de 2014

Configuración Previa de Solaris 5.10 para Instalar Grid Infrastructure y Oracle Database 11gR2

En este post nos enfocaremos a realizar las configuraciones previas para la instalación de Grid Infrastructure y Oracle Database 11gR2. A continuación se describen en detalle los pasos a seguir:

a) Revisamos que el tamaño de la memoria asignada sea de 4Gb o superior, determinamos con la siguiente instrucción:
bash-3.2# /usr/sbin/prtconf | grep "Memory size"

b) Determinamos el tamaño de SWAP que tenemos configurado, el valor debería ser bajo lo especificado con la tabla a continuación:

RAM
Tamaño del SWAP
Entre 1 GB y 2 GB
1.5 veces al del tamaño de la memoria RAM.
Entre 2 GB y 16 GB
Igual tamaño al de la memoria RAM.
Más de 16 GB
16 GB

En nuestro caso la memoria RAM es de 4 GB, por lo tanto, en función de la tabla mencionada anteriormente nuestro SWAP debería ser del mismo tamaño. Para determinar el tamaño ejecutamos lo siguiente:
bash-3.2# /usr/sbin/swap –l
 
El tamaño de SWAP para cada bloque es de 512 bytes, por lo tanto, para hallar el tamaño total se debe calcular bajo la siguiente expresion (blocks*512)/1024/1024/1024=Swap expresado en GB. Así el tamaño obtenido es de 4Gb.

 c) Verificamos que lo paquetes necesarios ya se encuentre instalados en el sistema operativo. Ejecutamos la siguiente instrucción:
bash-3.2# pkginfo -i SUNWarc SUNWbtool SUNWcsl SUNWhea SUNWlibC SUNWlibm SUNWlibms SUNWsprot SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs

Si no estuviera instalado y diera el error como se muestra en la captura anterior, ejecutamos lo siguiente teniendo como origen el cd de instalación de los binarios:
bash-3.2# pkgadd -d /cdrom/sol_10_113_x86/Solaris_10/Product SUNWi1cs SUNWi15cs
Una vez instalado ya no debería dar error al listar los paquetes necesarios para el sistema operativo.

d) Para nuestra instalación utilizaremos un solo usuario (oracle) para que maneje tanto la infraestructura Grid y el motor de Base de Datos, por lo tanto, creamos los usuarios y grupos necesarios para la instalación.
bash-3.2# groupadd dba
bash-3.2# groupadd oinstall
bash-3.2# groupadd oper
bash-3.2# groupadd asmadmin
bash-3.2# groupadd asmdba
bash-3.2# groupadd asmoper
bash-3.2# useradd -g oinstall -G dba,oper,asmdba,asmadmin,asmoper -d /export/home/oracle oracle
bash-3.2# passwd oracle (ejemplo: oracle123)

e) Creamos los directorios para el usuario “oracle”:
bash-3.2# mkdir /export/home/oracle
bash-3.2# chown -R oracle:oinstall /export/home/oracle

f) Creamos los directorios para la instalación:
bash-3.2# mkdir -p /u01/app/oracle/product/11.2.0.3/db_1
bash-3.2# mkdir -p /u01/app/oracle/product/11.2.0.3/grid_1
bash-3.2# chmod -R 775 /u01
bash-3.2# chown -R oracle:oinstall /u01

g) Adicionamos project y verificamos en “/etc/project” que se haya creado correctamente.
bash-3.2# projadd -U oracle oracle

Añadimos la siguiente entrada al archivo “/etc/user_attr” dell project asignando al usuario y luego lo verificamos:
bash-3.2# echo "oracle::::project=oracle" >> /etc/user_attr

h) Modificamos y configuramos los procesos de los projects creados:
bash-3.2# projmod -s -K "project.max-sem-ids=(priv,100,deny)" oracle
bash-3.2# projmod -s -K "process.max-sem-nsems=(priv,256,deny)" oracle
bash-3.2# projmod -s -K "project.max-shm-memory=(priv,4g,deny)" oracle
bash-3.2# projmod -s -K "project.max-shm-ids=(priv,100,deny)" oracle
bash-3.2# projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" oracle

i) Configuramos los parámetros del kernel a valores iguales o superiores de lo recomendado.
bash-3.2# echo "set max_nprocs = 30000"  >> /etc/system
bash-3.2# echo "set maxuprc = 16384"     >> /etc/system
bash-3.2# echo "set noexec_user_stack=1"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmni=100"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmns=1024"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmsl=256"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semvmx=32767"  >> /etc/system
bash-3.2# echo "set shmsys:shminfo_shmmax=4294967296"  >> /etc/system
bash-3.2# echo "set shmsys:shminfo_shmmni =100"  >> /etc/system

Asignamos valores a los parámetros TCP y UDP:
bash-3.2# /usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000
bash-3.2# /usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500
bash-3.2# /usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000
bash-3.2# /usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500

Adicionar las siguientes líneas en el archivo “/etc/inittab”, para que las configuración de TCP y UDP del kernel persistan después de algún reinicio.
bash-3.2# echo “tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000 > /dev/console” >> /etc/inittab
bash-3.2# echo “tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500 > /dev/console” >> /etc/inittab
bash-3.2# echo "tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000 > /dev/console" >> /etc/inittab
bash-3.2# echo "tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500 > /dev/console" >> /etc/inittab


j) Finalmente configuramos las variables de entorno. Nos conectamos como usuario oracle y definimos sus variables de entorno, para ello modificamos el archivo .profile adicionando las siguientes entradas.
echo "Asignando variables para usuario ORACLE"
echo "...................................."
LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0.3/db_1/lib; export LD_LIBRARY_PATH
PATH=/usr/sbin:/usr/ucb:/etc:.; export PATH
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0.3/db_1; export ORACLE_HOME
GRID_HOME=$ORACLE_BASE/product/11.2.0.3/grid_1; export GRID_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:/usr/ccs/bin:/usr/bin:/usr/sbin:/usr/local/bin:.; export PATH
EDITOR=vi; export EDITOR
TEMP=/tmp; export TEMP
TMPDIR=/tmp; export TMPDIR
echo "Realizado"

Paulo Ticona

Fuentes:
http://docs.oracle.com/cd/E11882_01/nav/portal_11.htm#solaris_installation_guides
Grid Infrastructure Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E47805-02
Database Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E48357-02

23 de junio de 2014

Generando reportes AWR, ASH y ADDM

En algún momento durante el monitoreo de nuestra base de datos Oracle será necesario obtener información detallada en reportes, estos podrían ser los de AWR, AHR y/o ADDM. Este post se enfocará en realizar las mismas utilizando scripts, una manera alternativa a lo que nos ofrece con la interfaz gráfica de Enterprise Manager. A continuación se detalla los pasos para obtener los reportes.

A) Reporte AWR (awrrpt.sql)
El utilitario de informes AWR proporciona una visión general del rendimiento de bases de datos en un determinado tiempo. En esencia, calcula la variación de la actividad de la base de datos en el intervalo de tiempo elegido. el script "awrrpt.sql" se encuentra en el directorio $ORACLE_HOME/RDBMS/admin.
La salida del archivo es ubicada en el directorio actual. Para una mejor comprensión de dicho informe seleccionar el formato HTML.

1. Ingresamos al directorio donde se generará el Informe AWR.
bash-3.2$ cd /u01/informes/
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
bash-3.2$
2 Nos conectamos vía sqlplus con usuario de provilegios de DBA.
bash-3.2$ sqlplus pticona

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jun 22 23:58:15 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL>
3. Ejecutamos awrrpt.sql y nos aparecerá los datos actuales de la instancia.
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  798387748 PRMY                1 prmy
3.1. Elegimos la opción para que el informe se genere en formato "html".
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type:html

Type Specified:  html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 798387748         1 PRMY         prmy         primario

Using  798387748 for database Id
Using          1 for instance number

3.2. Para encontrar todos los AWR de la base de datos solo damos enter sin escribir nada.
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing  without
specifying a number lists all completed snapshots.

Enter value for num_days:

Listing all Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
prmy         PRMY                 1 18 Jun 2014 01:30      1
                                  2 18 Jun 2014 11:13      1
                                  3 18 Jun 2014 12:00      1
                                  4 22 Jun 2014 15:04      1
                                  5 22 Jun 2014 16:00      1
                                  6 22 Jun 2014 17:00      1
                                  7 22 Jun 2014 18:00      1
                                  8 22 Jun 2014 19:00      1
                                  9 22 Jun 2014 20:00      1
                                 10 22 Jun 2014 21:00      1
                                 11 22 Jun 2014 22:00      1
                                 12 22 Jun 2014 23:00      1
                                 13 23 Jun 2014 00:01      1
3.3. Con el listado desplegado, elegimos el intervalo de tiempo.
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 10
Begin Snapshot Id specified: 10

Enter value for end_snap: 11
End   Snapshot Id specified: 11
3.4. Asignamos el nombre para el reporte.
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_10_11.html.  To use this name,
press  to continue, otherwise enter an alternative.

Enter value for report_name: reporte_awr.html
.
.
Report written to reporte_awr.html
3.5. Salimos de sqlplus.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
bash-3.2$
4 Finalmente verificamos el archivo creado.
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
reporte_awr.html
bash-3.2$
5 Para realizar una comparativa de reportes AWR, utilizar el siguiente script.
SQL> @$ORACLE_HOME/rdbms/admin/awrddrpt.sql
B) Reporte ASH (ashrpt.sql)
El reporte ASH es útil para determinar la cantidad de sesiones activas, lo que estaban haciendo, y que sentencias SQL son las más activas durante el período de tiempo seleccionado. Especialmente es muy útil para el análisis de problemas de rendimiento transitoria. El script "ashrpt.sql" se encuentra en el directorio $ORACLE_HOME/RDBMS/admin.
La salida del archivo es ubicada en el directorio actual. Para una mejor comprension de dicho informe seleccionar el formato HTML. 

1. Ingresamos al directorio donde se generará el Informe ASH.
bash-3.2$ cd /u01/informes/
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
bash-3.2$
2 Nos conectamos vía sqlplus con usuario de provilegios de DBA.
bash-3.2$ sqlplus pticona

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jun 22 23:58:15 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL>
3. Ejecutamos ashrpt.sql y nos aparecerá los datos actuales de la instancia.
SQL> @$ORACLE_HOME/rdbms/admin/ashrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  798387748 PRMY                1 prmy
3.1. Elegimos la opción para que el informe se genere en formato "html".
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: html

Type Specified:  html

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 798387748         1 PRMY         prmy         primario

Defaults to current database

Using database id: 798387748

Enter instance numbers. Enter 'ALL' for all instances in a
RAC cluster or explicitly specify list of instances (e.g., 1,2,3).
Defaults to current instance.

Using instance number(s): 1

3.2. Ingresamos la hora de inicio y el intervalo de tiempo de duracion para el reporte ASH.
ASH Samples in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Oldest ASH sample available:  18-Jun-14 01:19:24   [   7150 mins in the past]
Latest ASH sample available:  23-Jun-14 00:29:06   [      0 mins in the past]


Specify the timeframe to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter begin time for report:

--    Valid input formats:
--      To specify absolute begin time:
--        [MM/DD[/YY]] HH24:MI[:SS]
--        Examples: 02/23/03 14:30:15
--                  02/23 14:30:15
--                  14:30:15
--                  14:30
--      To specify relative begin time: (start with '-' sign)
--        -[HH24:]MI
--        Examples: -1:15  (SYSDATE - 1 Hr 15 Mins)
--                  -25    (SYSDATE - 25 Mins)

Defaults to -15 mins
Enter value for begin_time: 06/22/14 21:05
Report begin time specified: 06/22/14 21:05

Enter duration in minutes starting from begin time:
Defaults to SYSDATE - begin_time
Press Enter to analyze till current time
Enter value for duration: 60
Report duration specified:   60

Using 22-Jun-14 21:05:00 as report begin time
Using 22-Jun-14 22:05:00 as report end time
3.3. Asignamos el nombre para el reporte ASH.
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is ashrpt_1_0622_2205.html.  To use this name,
press  to continue, otherwise enter an alternative.
Enter value for report_name: reporte_ash.html
.
.
Report written to reporte_ash.html
3.4. Salimos de sqlplus.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
bash-3.2$
4 Finalmente verificamos el archivo creado.
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
reporte_ash.html
bash-3.2$
C) Reporte ADDM (addmrpt.sql)
El utilitario de ADDM crea un informe con las conclusiones de rendimiento de base de datos. El script "addmrpt.sql" se encuentra en el directorio $ORACLE_HOME/RDBMS/admin. La salida del archivo se ubica en el directorio actual y es enformato de archivo de texto.
1. Ingresamos al directorio donde se generará el reporte ADDM.
bash-3.2$ cd /u01/informes/
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
bash-3.2$
2 Nos conectamos vía sqlplus con usuario de provilegios de DBA.
bash-3.2$ sqlplus pticona

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jun 22 23:58:15 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL>
3. Ejecutamos addmrpt.sql y nos aparecerá los datos actuales de la instancia.
SQL> @$ORACLE_HOME/rdbms/admin/addmrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  798387748 PRMY                1 prmy


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 798387748         1 PRMY         prmy         primario

Using  798387748 for database Id
Using          1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing  without
specifying a number lists all completed snapshots.



Listing the last 3 days of Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
prmy         PRMY                 4 22 Jun 2014 15:04      1
                                  5 22 Jun 2014 16:00      1
                                  6 22 Jun 2014 17:00      1
                                  7 22 Jun 2014 18:00      1
                                  8 22 Jun 2014 19:00      1
                                  9 22 Jun 2014 20:00      1
                                 10 22 Jun 2014 21:00      1
                                 11 22 Jun 2014 22:00      1
                                 12 22 Jun 2014 23:00      1
                                 13 23 Jun 2014 00:01      1
3.1. Elegimos el intervalo de snapshots para el reporte ADDM.
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 10
Begin Snapshot Id specified: 10

Enter value for end_snap: 11
End   Snapshot Id specified: 11
3.2. Asignamos el nombre para el reporte.
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is addmrpt_1_10_11.txt.  To use this name,
press  to continue, otherwise enter an alternative.

Enter value for report_name: reporte_addm.txt
.
.
.
The database's maintenance windows were active during 100% of the analysis
period.

End of Report
Report written to reporte_addm.txt
SQL>
3.3. Salimos de sqlplus.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
bash-3.2$
4 Finalmente verificamos el archivo creado.
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
reporte_addm.txt
bash-3.2$

Paulo Ticona
Fuentes:
http://www.oracle.com/us/products/enterprise-manager/diagnostic-pack-11g-ds-068465.pdf
http://www.oracle.com/technetwork/database/manageability/diag-pack-ow09-133950.pdf

16 de junio de 2014

Como crear y montar File System en Solaris 5.10

En este post nos enfocaremos a crear y montar un nuevo file system a nuestro sistema operativo y mantenerlo de manera persistente. A continuación se detallan los pasos para realizar el procedimiento:

1. Ejecutar los comandos como root o usuario con equivalente rol.

2. Formatear el disco. ¿Cómo dar formato a un disco?

3. Creamos el file system

3.1. Elegimos el disco
bash-3.2# echo | format
Searching for disks...
Inquiry failed for this logical diskdone

AVAILABLE DISK SELECTIONS:
       0. c0d0 <Úxäþ¢ÿþ©ÿþ@©üþ cyl 2607 alt 2 hd 255 sec 63>
          /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
       1. c2t0d0 
          /pci@0,0/pci15ad,1976@10/sd@0,0
Specify disk (enter its number): Specify disk (enter its number):
bash-3.2#

3.2. procedemos a ejecutar el comando con el disco elegido.
bash-3.2# newfs /dev/rdsk/c2t0d0s0
newfs: construct a new file system /dev/rdsk/c2t0d0s0: (y/n)? y
Warning: inode blocks/cyl group (591) >= data blocks (113) in last
    cylinder group. This implies 1818 sector(s) cannot be allocated.
/dev/rdsk/c2t0d0s0:     31260672 sectors in 5088 cylinders of 48 tracks, 128 sectors
        15264.0MB in 318 cyl groups (16 c/g, 48.00MB/g, 5824 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920,
Initializing cylinder groups:
......
super-block backups for last 10 cylinder groups at:
 30284320, 30382752, 30481184, 30579616, 30678048, 30776480, 30874912,
 30973344, 31071776, 31170208
bash-3.2#

4. Es ente paso creamos y montamos el file system
bash-3.2# pwd
/
bash-3.2# mkdir /u01
bash-3.2# mount /dev/dsk/c2t0d0s0 /u01/
bash-3.2#

5. Adicionamos la entrada al archivo "/etc/vfstab" para que resida de manera persistente en el sistema operativo tras cada reinicio.
#device              device              mount    FS       fsck   mount    mount
#to mount            to fsck             point    type     pass   at boot  options
#
/dev/dsk/c2t0d0s0    /dev/rdsk/c2t0d0s0  /u01     ufs      1      yes      -

6. Finalmente visualizamos su configuración en el sistema operativo.
bash-3.2# df -h
Filesystem             size   used  avail capacity  Mounted on
/dev/dsk/c0d0s0         14G   4.0G   9.6G    30%    /
........               .....  ....   ....    ...    ...........
/dev/dsk/c0d0s7        1.9G   2.0M   1.9G     1%    /export/home
/dev/dsk/c2t0d0s0       15G    15M    15G     1%    /u01

Paulo Ticona

Fuentes
http://docs.oracle.com/cd/E23823_01/html/817-5093/fscreate-6.html#fsmount-29904
http://docs.oracle.com/cd/E23823_01/html/817-5093/fscreate-6.html

Crear un raw device para ASM en Solaris 10

En alguna ocasión necesitaremos formatear algún disco nuevo en el sistema operativo Solaris 5.10, a continuación se detallan los pasos a seguir para realizar dicho procedimiento.  En este escenario de ejemplo se tienen 2 discos, uno corresponde al del Sistema Operativo y el otro corresponde al nuevo disco que se adicionó y que tiene un tamaño de 15Gb.

1. Listamos los discos disponibles para realizar el formateo, en nuestro ejemplo 0 (c0d0) es del S.O. y 1 (c2t0d0) es el nuevo disco.
bash-3.2# format
Searching for disks...
Inquiry failed for this logical diskdone

AVAILABLE DISK SELECTIONS:
       0. c0d0 <Úxäþ¢ÿþ©ÿþ@©üþ cyl 2607 alt 2 hd 255 sec 63>
          /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
       1. c2t0d0 
          /pci@0,0/pci15ad,1976@10/sd@0,0
Specify disk (enter its number):

2. Elegimos el disco a formatear, en nuestro caso es el 1 (c2t0d0).
Specify disk (enter its number): 1
selecting c2t0d0
[disk formatted]

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !     - execute , then return
        quit
format>

3. Una ves elegido, realizamos lo siguiente.
format> fdisk
No fdisk table exists. The default partition for the disk is:

  a 100% "SOLARIS System" partition

Type "y" to accept the default partition,  otherwise type "n" to edit the
 partition table.
y
format>

4. Nos vamos por la opción para realizar la partición, como se detalla a continuación.
format> partition

PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        7      - change `7' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        ! - execute , then return
        quit
partition>

5. Elegimos desde la partición "0" y empezamos desde el cilindro 1, hasta el tamaño total del disco disminuido en 0.65%, en nuestro caso el disco es de 15Gb.
partition> 0
Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       0               0         (0/0/0)           0

Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 1
Enter partition size[0b, 0c, 1e, 0.00mb, 0.00gb]: 14.90gb
partition>

6. En este paso guardamos la configuración realizada al disco.
partition> label
Ready to label disk, continue? yes

partition>

7. Finalmente ejecutamos los comandos para salir de la configuración.
partition> quit

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !     - execute , then return
        quit
format> quit
bash-3.2#

Con ello concluimos el procedimiento.

Paulo Ticona

6 de junio de 2014

Habiliar acceso a usuario root - Solaris 10

Alguna ves necesitaremos acceder con el usuario root desde una consola externa de deonde reside el sistema operativo. Los pasos son muy simples y se los detalla a continuacion:

1ro. Desde el sistema operativo editar el archivo /etc/ssh/sshd_config y habilitar la opcion PermitRootLogin.
bash-3.2$ vi /etc/ssh/sshd_config
.....
.............
# Are root logins permitted using sshd.
# Note that sshd uses pam_authenticate(3PAM) so the root (or any other) user
# maybe denied access by a PAM module regardless of this setting.
# Valid options are yes, without-password, no.
PermitRootLogin yes
.....
.............

2do. Reiniciar el servicio.
bash-3.2# svcadm restart svc:/network/ssh:default

Con esa configuración ya tendríamos  habilitado el acceso remoto como usuario root.

Paulo Ticona.

Fuentes,
http://docs.oracle.com/cd/E19082-01/819-7309/headl-9/index.html

4 de mayo de 2014

Análisis y evaluación de resultados de la calibración de I/O

En un post anterior Calibración de I/O se daba a detalle los pasos previos para realizar el procedimiento, ahora este post se dedica íntegramente al análisis y su evaluación de resultados antes, durante y después. El ambiente de prueba tiene las siguientes características: 

1. Es de la plataforma UNIX, sistema operativo Solaris.
2. Motor de base de datos Oracle 11g release 11.2.0.3
3. La cantidad de procesadores es solamente 1.
4. El ambiente de almacenamiento es ASM, y el diskgroup donde se almacenan los datafiles cuentan con dos 2 discos. 

A continuación se detalla el script que se elaboro para la calibración
SQL> COL NAME FORMAT A50
SET SERVEROUTPUT ON
DECLARE
  l_max_iops        INTEGER;
  l_max_mbps        INTEGER;
  l_actual_latency  INTEGER;
  ti   VARCHAR2 (50);
  tf   VARCHAR2 (50);
  res   NUMBER (15);
BEGIN
  ti:=TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
  DBMS_RESOURCE_MANAGER.calibrate_io (
    num_physical_disks => 2,
    max_latency        => 10,
    max_iops           => l_max_iops,
    max_mbps           => l_max_mbps,
    actual_latency     => l_actual_latency);
   tf:=TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
   DBMS_OUTPUT.PUT_LINE ('Ini: ' || ti);
   DBMS_OUTPUT.PUT_LINE ('Fin: ' || tf);
   res := (to_date(tf,'DD/MM/YYYY HH24:MI:SS')- to_date(ti,'DD/MM/YYYY HH24:MI:SS'))*24*60*60;
  DBMS_OUTPUT.PUT_LINE ('Tiempo Calibracion= ' ||res||' segundos');
  DBMS_OUTPUT.put_line ('****************************************');
  DBMS_OUTPUT.put_line ('l_max_iops       = ' || l_max_iops);
  DBMS_OUTPUT.put_line ('l_max_mbps       = ' || l_max_mbps);
  DBMS_OUTPUT.put_line ('l_actual_latency = ' || l_actual_latency);
  DBMS_OUTPUT.put_line ('****************************************');
END;
/

Para realizar la comparativa del rendimiento y su impacto se crearon dos scripts que se corre antes y después de la calibración.
El primer script genera la carga de 10000000 de registros con el commit al finalizar toda la transacción y el segundo script genera la carga de 1000000 de registros con el commit después de cada inserción.

Script 1
Script 2
SET SERVEROUTPUT ON
DECLARE
   ti    VARCHAR2 (50);
   tf    VARCHAR2 (50);
   res   NUMBER (15);
   res1   NUMBER (15);
BEGIN
   ti := TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
   FOR i IN 1 .. 10000000
   LOOP
      INSERT INTO pticona.prueba1
           VALUES (i, 'Fila Nro: ' || i);
   END LOOP;
   COMMIT;
   tf := TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
   DBMS_OUTPUT.PUT_LINE ('Ini: ' || ti);
   DBMS_OUTPUT.PUT_LINE ('Fin: ' || tf);
   res :=
      (TO_DATE (tf, 'DD/MM/YYYY HH24:MI:SS')
       - TO_DATE (ti, 'DD/MM/YYYY HH24:MI:SS'))
      * 24*60*60;
   res1 := round(res/60,2);
   DBMS_OUTPUT.PUT_LINE ('Total= ' || res || ' segundos');
   DBMS_OUTPUT.PUT_LINE ('Total= ' || res1 || ' minutos');
END;
/
SET SERVEROUTPUT ON
DECLARE
   ti    VARCHAR2 (50);
   tf    VARCHAR2 (50);
   res   NUMBER (15);
   res1   NUMBER (15);
BEGIN
   ti := TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
   FOR i IN 1 .. 1000000
   LOOP
      INSERT INTO pticona.prueba2
           VALUES (i, 'Fila Nro: ' || i);
             COMMIT;
   END LOOP;
   tf := TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
   DBMS_OUTPUT.PUT_LINE ('Ini: ' || ti);
   DBMS_OUTPUT.PUT_LINE ('Fin: ' || tf);
   res :=
      (TO_DATE (tf, 'DD/MM/YYYY HH24:MI:SS')
       - TO_DATE (ti, 'DD/MM/YYYY HH24:MI:SS'))
      * 24* 60* 60;
   res1 := round(res/60,2);
   DBMS_OUTPUT.PUT_LINE ('Total= ' || res || ' segundos');
   DBMS_OUTPUT.PUT_LINE ('Total= ' || res1 || ' minutos');
END;
/

 A continuación la gráfica 1.1 detalla el impacto en la base de datos durante la calibración realizada, Oracle recomienda que la calibración sea realizada en periodos donde la base de datos no tenga mucha actividad. Como se visualiza en la gráfica 1.1 el impacto supera al máximo de CPU que se tiene del servidor.
1.1 Impacto en la Base de datos durante la Calibración
















En los gráficos 2.1 y 2.2 se realiza la comparativa del impacto antes y después de la ejecución de la calibración, se nota claramente que el evento de "User I/O" disminuye considerablemente.
Impacto antes de la Calibración
2.1 Impacto general antes de la calibración
Impacto después de la Calibración
2.2 Impacto general después de la calibración

En la comparación de los gráficos 3.1 y 3.2 se nota que la "E/S por segundo" mejora considerablemente debido a que supera el valor de 400 y antes de la calibración ni llega a los 300. En lo que se refiere a "MB por segundo" también existe una leve mejoría.
3.1 Impacto E/S antes de la calibración
3.2 Impacto E/S después de la calibración










La gráficos 4.1 y 4.2 detalla el tiempo que demora el primer script antes y después de la calibración.
4.1 Primer query antes de la calibración
4.2 Primer query después de la calibración









La gráficos 5.1 y 5.2 detalla el "I/O" del primer script antes y después de la calibración.
5.1 "I/O" del primer query antes de la calibración
5.2 "I/O" del primer query después de la calibración





La gráficos 6.1 y 6.2 detalla el tiempo que demora el segundo script antes y después de la calibración.
6.1 Segundo query antes de la calibración
6.2 Segundo query después de la calibración









La gráficos 7.1 y 7.2 detalla el "I/O" del segundo script antes y después de la calibración.
7.1 "I/O" del segundo query antes de la calibración
7.2 "I/O" del segundo query después de la calibración





continuación se despliega el detalle obtenido de un reporte AWR, durante los periodos de carga en la base de datos, es decir, antes y después de la realizar la calibración:
8. Reporte AWR de calibración


Paulo Ticona

Referencias
Oracle Database "Performance Tuning Guide 11g Release 2 (11.2)", E16638-05
http://arup.blogspot.com/2008/08/resource-manager-io-calibration-in-11g.html