Tablespace Point-in-Time Recovery en Pluggable Database

En esta serie de artículos que estoy publicando durante los últimos días, voy a escribir ahora sobre un procedimiento que es bastante interesante y ofrece una flexibilidad enorme al administrador de la base de datos Oracle en lo que a recuperación frente a errores lógicos se refiere. Se trata del procedimiento para realizar la recuperación de un tablespace a un punto determinado en el tiempo, o con sus siglas en inglés TSPITR (Tablespace point-in-time Recovery).

Este tipo de procedimiento se puede usar, según la documentación oficial de Oracle, en las siguientes circunstancias:

  • Recuperar pérdida de datos después de un cambio del tipo DDL.
    • En un caso así, no se puede hacer uso de la opción Flashback Table.
  • Recuperar una tabla que ha sido borrada con la opción purge.
  • Recuperar la corrupción lógica de una tabla.
  • Recuperar tablespaces borrados.
  • Recuperar una base de datos lógica a un punto distinto de la base de datos física.
    • Esto se puede hacer cuando varias bases de datos lógicas existen en tablespaces diferentes de una misma base de datos física.

Como este blog es eminentemente práctico, voy a trabajar sobre un ejemplo. Tengo una base de datos Oracle 12c, en la que hago uso de su funcionalidad de contenedor (o multitenant) con una base de datos conectable (pluggable) denominada PDB11. Aquí tengo un tablespace de usuario, TBS_PDB11_01, y un esquema con nombre LOCAL_PDB11 que tiene varias tablas.

Leer más de esta entrada

Anuncios

Oracle Flashback Database

La opción de Oracle denominada Flashback Database es similar en sus efectos a la recuperación del tipo point-in-time (volver a un estado anterior de la base de datos en el pasado reciente), aunque es una operación más rápida debido a que no requiere restaurar datos desde un backup, sino aplicar cambios desde el archivelog. Es una opción que puede usarse incluso para revertir los cambios tras un open reset logs.

Flashback Database usa su propio mecanismo de almacenamiento de logs, creando lo que se conoce como flashback logs y almacenando los mismos en la fast recovery area. Para tener opciones de hacer uso de esta funcionalidad es necesario tener, como he comentado, una fast recovery area correctamente configurada, así como asignar un valor adecuado al parámetro db_flashback_retention_target (que viene a indicar cuánto atrás se puede volver). Y además, tener la base de datos funcionando en modo archivado. En resumen, para poder usar Flashback Database es necesario:

  • Activar el modo de archivado de la base de datos.
  • Configurar la fast recovery area.
  • Asignar un valor adecuado al parámetro db_flashback_retention_target.
  • Activar la opción. Para ello, con la base de datos en estado mount ejecutar ALTER DATABASE FLASHBACK ON.

Leer más de esta entrada

Recuperar fichero corrupto en PDB

Describo aquí el proceso para recuperar un fichero de datos corrupto en una PDB. Lógicamente, de aplicación en bases de datos Oracle 12c (aunque la recuperación en bases de datos Oracle 11g o 10g es muy similar).

Parto de una base de datos con la opción archivelog activada, y con una copia de seguridad rman realizada. Para simular la corrupción del fichero de datos he introducido algunos caracteres extra en el datafile de usuario con el que estoy trabajando; eso sí, con la base de datos parada.

Leer más de esta entrada

Recuperar tabla desde copia RMAN

Procedimiento directo y sencillo, como la mayoría de los que he escrito en este blog. En este caso voy a describir como recuperar una tabla (para ser más exacto, un registro de una tabla) a partir de una copia física de la base de datos Oracle. Aunque antes de continuar habría que señalar que esta opción solo se puede usar a partir de la versión Oracle 12c. En versiones anteriores no se puede aplicar este procedimiento.

Para mostrar el procedimiento parto de una base de datos contenedor (CDB1) que contiene una base de datos pluggable denominada PDB11. En esta base de datos he creado un esquema con nombre LOCAL_PDB11 con dos tablas: EMPLEADO y PRODUCTO. La situación que se plantea es una modificación errónea de la tabla PRODUCTO, que se descubre lo bastante tarde como para no poder recuperar el dato con una consulta timestamp. Por supuesto, en esta hipotética situación tengo una copia física de mi base de datos, realizada con RMAN; de otra forma, lógicamente, el presente procedimiento tampoco se podría aplicar.

Leer más de esta entrada

My path to Oracle OCP 12c (I)

In the begining of this year, 2016, i begun my path for the certification OCP 12c. I was OCA 10g, but this certification was deprecated the past March, so i have to update it. I had found that the best way, proposed by Oracle University, was the path called “Upgrade Oracle9i/10g/11g OCA to Oracle Database 12c OCP”, which was even a jump from OCA (the basic Oracle certification) to OCP (middle Oracle certification). I only needed two things:

  • A course, choosing it from a set of various Oracle courses.
  • Pass the 1z0-067 exam.

It seems easy. So i begun my path. First, talked with my company to comunicate my plan. They were agree with me, so i choose a simple course in the modality of ‘Autostudy CD’, the most cheap. First error. When i finished my course and asked Oracle for a certification, the told me that with the modality of ‘Autostudy CD’ there is no course certification, and even that with this modality, the course was not valid for the certification path.

Ok. A bit angree, i continued studing. I bought a book in Amazon called “Study Guide for 1Z0-067: Upgrade Oracle9i/10g/11g OCA to Oracle Database 12c OCP: Oracle Certification Prep“. Another error. That book is a resume, very thin resume, of the whole books that have Oracle to look for the very complicated questions in the exam. If somebody wants a book to study for this exam, that book does not exists. In fact, if you want to be ready for this exam, you have many books. The hole Oracle 12c documentation, that you can find here: more than 200 books. Very depresive.

I did not have time(neither now) for read that set of Oracle books. So, i tried to find an alternative way. I found CertBest, a web page with a plenty of real exams with free access. So i began to study with that reference. Even i found that other portals, like pass4sure had the same questions with the same correct answers. That was fantastic. Finally, i had a good way to prepare my exam. The third error. And, another time, very depresive.

Two weeks ago i thought i was ready for the exam. But, by chance, i found another interesting link called aiotestking, plenty of certification real exams. The best thing here is that the questions have many comments of people that are in the same path that myself. And then i realized that the answers i believed were true, in fact they were wrong: i had almost 60% of wrong answers. How i discovered that? By the very active users. One of them, nickname Tri, a man from Vietnam, posted one day that he was ready for the exam. Even he posted his facebook address. I look for him in facebook and i discovered that he pass the exam. So his answers are very reliables.

Now i think i have a correct way.

(to be continued)

Fatal error trying to open a database

Since now on, and perhaps because my need of improve, i will write my post in English. Sorry for the spanish readers, but i need to improve my English, and write in that language is a way.

This was a very complicated case, because like as usual, there was no procedure to fix it in an easy way. I hope you, reader, who come here looking for a similar error, to have a little more luck than me, and finally find what were you looking for.

The facts were as follows. In the morning of July first (2014), one of my company’s Oracle databases was down. When the operator tried to open it, these were the errors:

SMON: enabling cache recovery
Tue Jul 1 13:26:22 2014
Undo Segment 1 Onlined
Undo Segment 2 Onlined
Undo Segment 3 Onlined
Undo Segment 4 Onlined
Undo Segment 5 Onlined
Undo Segment 6 Onlined
Undo Segment 7 Onlined
Undo Segment 8 Onlined
Undo Segment 9 Onlined
Undo Segment 10 Onlined
Successfully onlined Undo Tablespace 1.
Dictionary check beginning
Dictionary check complete
Tue Jul 1 13:26:23 2014
SMON: enabling tx recovery
Tue Jul 1 13:26:23 2014
Database Characterset is WE8ISO8859P1
ORA-01555 caused by SQL statement below (Query Duration=0 sec, SCN: 0x0000 4001871b):
Tue Jul 1 13:26:23 2014
select increment$,minvalue,maxvalue,cycle#,order$,cache,highwater,audit$,f ags from seq$ where obj#=:1
Tue Jul 1 13:26:23 2014
Errors in file /u01/app/oracle/admin/BDPR/udump/itdb_ora_26510.trc:
ORA-00604: error producido a nivel 1 de SQL recursivo
ORA-01555: instantanea demasiado antigua: numero de segmento de rollback 8 con nombre "_SYSSMU8$" demasiado pequeño
Error 604 happened during db open, shutting down database
USER: terminating instance due to error 604
Instance terminated by USER, pid = 26510
ORA-1092 signalled during: alter database open...

Very ugly. So, we had one or more ‘ORA-01555’ (snapshot too old) every time we tried to open the database.

Leer más de esta entrada

gcc: Error interno: `Violación de segmento’ (programa cc1)

Or in English:

gcc: Internal error: 'Segment fault' (program cc1)

Este error me ha dado bastantes quebraderos de cabeza. Me lo he encontrado al ejecutar el script ‘$ORA_CRS_HOME/install/root102.sh‘ como último paso en la aplicación del parche 10.2.0.4 en un entorno Oracle RAC. Exactamente, el error era este:

[root@localhost ~]# /opt/crs/oracle/10.2.0/install/root102.sh
Creating pre-patch directory for saving pre-patch clusterware files
Completed patching clusterware files to /opt/crs/oracle/10.2.0
Relinking some shared libraries.
gcc: Error interno: `Violación de segmento' (programa cc1)
Por favor envíe un reporte completo de error.
Vea <URL:http://bugzilla.redhat.com/bugzilla> para más instrucciones.
mv: no se puede efectuar `stat' sobre "ntcontab.o": No existe el fichero o el directorio
/usr/bin/ar: /opt/crs/oracle/10.2.0/lib/ntcontab.o: No such file or directory
make: *** [ntcontab.o] Error 1
gcc: Error interno: `Violación de segmento' (programa cc1)
Por favor envíe un reporte completo de error.
Vea <URL:http://bugzilla.redhat.com/bugzilla> para más instrucciones.
mv: no se puede efectuar `stat' sobre "nnfgt.o": No existe el fichero o el directorio
/usr/bin/ar: /opt/crs/oracle/10.2.0/lib32/nnfgt.o: No such file or directory
gcc: Error interno: `Violación de segmento' (programa cc1)
Por favor envíe un reporte completo de error.
Vea <URL:http://bugzilla.redhat.com/bugzilla> para más instrucciones.
mv: no se puede efectuar `stat' sobre "nnfgt.o": No existe el fichero o el directorio
/usr/bin/ar: /opt/crs/oracle/10.2.0/lib/nnfgt.o: No such file or directory
make: *** [nnfgt.o] Error 1

Relinking of patched files is complete.
WARNING: directory '/opt/crs/oracle' is not owned by root
WARNING: directory '/opt/crs' is not owned by root
Preparing to recopy patched init and RC scripts.
Recopying init and RC scripts.
ocrcheck failed. Check /opt/crs/oracle/10.2.0/srvm/log for more details

Leer más de esta entrada