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