miércoles, 22 de agosto de 2012

ORA-01110 y ORA-01113 al querer abrir la base de datos luego de un corte de energía o shutdown abort


    Luego de un corte de energía, la base de datos daba el siguiente error:

SQL>ALTER DATABASE OPEN
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: ‘D:\ORACLE\PRODUCT\10.1.0\ORADATA\PROD\DATOS01.DBF’

Revisando el alert.log pude observer que al momento del corte estaba hacienda un backup online, pues la sentencia anterior al startup era un ALTER TABLESPACE … BEGIN BACKUP:

Sat Aug 18 01:05:28 2012
ARC1: Evaluating archive thread 1 sequence 74097
ARC1: Unable to archive thread 1 sequence 74097
      Log actively being archived by another process
Sat Aug 18 01:05:28 2012
Committing creation of archivelog 'D:\ARCHIVED_LOGS\ARCHIVED_PROD\ARCH_PROD_1_74097_611589480.ARC'
Sat Aug 18 01:05:29 2012
ALTER TABLESPACE "DATOS" BEGIN BACKUP
Completed: ALTER TABLESPACE "DATOS" BEGIN BACKUP
Starting up ORACLE RDBMS Version: 10.1.0.5.0.
System parameters with non-default values:
  processes                = 150
  sga_max_size             = 1258291200
  __shared_pool_size       = 620756992
  __large_pool_size        = 8388608
  __java_pool_size         = 8388608
  sga_target               = 1258291200
  control_files            = D:\ORACLE\PRODUCT\10.1.0\ORADATA\PROD\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\PROD\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\PROD\CONTROL03.CTL
  db_block_size            = 8192
  __db_cache_size          = 612368384
  compatible               = 10.1.0.5.0
  log_archive_dest_1       = LOCATION=D:\archived_logs\archived_prod\ MANDATORY
  log_archive_format       = arch_prod_%t_%s_%r.arc
  db_file_multiblock_read_count= 16
  db_recovery_file_dest    = D:\oracle\product\10.1.0\flash_recovery_area
  db_recovery_file_dest_size= 2147483648
  undo_management          = AUTO
  undo_tablespace          = UNDOTBS1
  remote_login_passwordfile= EXCLUSIVE
  db_domain                =
  dispatchers              = (PROTOCOL=TCP) SERVICE=orclprodXDB)
  job_queue_processes      = 10
  background_dump_dest     = D:\ORACLE\PRODUCT\10.1.0\ADMIN\PROD\BDUMP
  user_dump_dest           = D:\ORACLE\PRODUCT\10.1.0\ADMIN\PROD\UDUMP
  core_dump_dest           = D:\ORACLE\PRODUCT\10.1.0\ADMIN\PROD\CDUMP
  db_name                  = prod
  open_cursors             = 300
  pga_aggregate_target     = 209715200
Sat Aug 18 08:48:33 2012
starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
CJQ0 started with pid=9, OS id=3440
RECO started with pid=8, OS id=3428
Sat Aug 18 08:48:33 2012
starting up 1 shared server(s) ...
PMON started with pid=2, OS id=3332
DBW0 started with pid=4, OS id=3368
LGWR started with pid=5, OS id=3380
CKPT started with pid=6, OS id=3400
MMAN started with pid=3, OS id=3348
Oracle Data Guard is not available in this edition of Oracle.
Sat Aug 18 08:48:35 2012
alter database mount exclusive
Sat Aug 18 08:48:35 2012
Controlfile identified with block size 16384
SMON started with pid=7, OS id=3416
Sat Aug 18 08:48:39 2012
Setting recovery target incarnation to 1
Sat Aug 18 08:48:40 2012
Successful mount of redo thread 1, with mount id 1589792867
Sat Aug 18 08:48:40 2012
Database mounted in Exclusive Mode.
Completed: alter database mount exclusive
Sat Aug 18 08:48:40 2012
alter database open
ORA-1113 signalled during: alter database open...

Lo que hice entonces es hacer un END BACKUP, y luego pudo abrir sin problemas:

SQL> ALTER TABLESPACE DATOS END BACKUP;
Tablespace altered.
SQL > ALTER DATABASE OPEN;
Database altered.
Explicación

El BEGIN BACKUP realizado sobre el tablespace “congela” algunas secciones de los headers de los datafiles, y a partir de ese momento, en redo se genera una marca de comienzo, y se registran las modificaciones. En los datafiles en las secciones de datos también se van registran los cambios. Cuando levantamos la base, parte de ese header se encuentra desactualizado por lo que para Oracle el datafile requiere una recuperación. Al realizarse el END BACKUP esos headers se actualizan, y en los redologs se registra una marca de fin.
Otras formas de solucionar el problema

Asi mismo, se podría hacer también un ALTER DATABASE END BACKUP, lo cual quita de modo backup todos los tablespaces que pudieran habre quedado marcados:
SQL> STARTUP MOUNT
SQL> ALTER DATABASE END BACKUP;

IMPORTANTE: no utilizar end backup si no se esta seguro si los datafiles están actualizados, esto es, si hubo una restauración de algún backup hay que realizar un recover como se indica:

SQL> STARTUP MOUNT
SQL> RECOVER DATABASE;
Referencias

viernes, 17 de agosto de 2012

Migración a Oracle SecureFiles - Caso de Prueba


   Resumen

La prueba consiste en la migración de la tabla TABLA1 cuyo LOB es de tipo BasicFiles (BF) al tipo SecureFiles (SF). La idea es realizar la migración simple, luego con deduplicación solamente y por último deduplicación con compresión, para poder realizar un análisis comparativo del uso del espacio.

miércoles, 15 de agosto de 2012

Migración a Oracle SecureFiles

Resumen


En la versión Oracle 8i se introdujo la capacidad de almacenar datos desestructurados con datos de tipo LOB (Large Object Binary). A partir de la versión 11gR1 introduce un nuevo mecanismo para almacenar este tipo de objetos llamado SecureFiles y en contrapartida los tipo LOB son llamados BasicFiles.

Es una nueva implementación para manejar los LOBs que mejora la performance entre 3 y 6 veces con respecto a los BasicFiles.

No se requieren realizar cambios en la aplicación para acceder a los datos, pero para poder utilizar este tipo de dato, es necesario realizar una migración. Sí se permite el uso combinado de los dos tipos, es decir, se puede utilizar una partición con BasicFiles y las nuevas particiones con SecureFiles.