domingo, 13 de noviembre de 2022

Oracle Database Enterprise Edition 19c: Restauración de un PDB a un Restore Point- Ejemplo borrado de esquema-


Es posible que no te guste ver videos y que requieras ver la parte escrita. Aquí te muestro, como hacer una restauración de un PDB, previo a la creación de puntos de restauración.

Primero que todo nos vamos a conectar a nuestro contenedor de base de datos. Para efectos de referencia, estaremos utilizando una versión 19c, con PSU 17

SQL> connect / as sysdba
Connected.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBRMAN                        READ WRITE NO
         4 SECURITY                       READ WRITE NO
         6 RESTORE_POINT                  READ WRITE NO

SQL> exit

Como puedes ver tenemos 3 PDBs creadas en nuestro contenedor. Para este ejemplo, vamos a utlizar la instancia "RESTORE_POINT".

Veamos que tenemos dentro de nuestra PDB.

[oracle@instructor-laboratorio admin]$ sqlplus hr/hr@restore_point


SQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 5 18:40:43 2022
Version 19.17.0.0.0
Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

SQL> select * from cat;
TABLE_NAME                               TABLE_TYPE
---------------------------------------- -----------
REGIONS                                  TABLE
COUNTRIES                                TABLE
LOCATIONS                                TABLE
LOCATIONS_SEQ                            SEQUENCE
DEPARTMENTS                              TABLE
DEPARTMENTS_SEQ                          SEQUENCE
JOBS                                     TABLE
EMPLOYEES                                TABLE
EMPLOYEES_SEQ                            SEQUENCE
JOB_HISTORY                              TABLE
EMP_DETAILS_VIEW                         VIEW
11 rows selected.

SQL> select count(*) from cat;
  COUNT(*)
----------
        11
SQL> select count(*) from employees;
  COUNT(*)
----------
       107

Como haz notado tenemos el esquema de ejemplos de HR. Este es el que vamos a tomar como referencia para el ejercicio.

Vamos a conectarnos con privilegios de SYSDBA a la instancia PDB.

SQL> connect sys/oracle@restore_point as sysdba
Connected.

Una vez conectados, vamos a crear nuestro punto de restauración para recuperación.

SQL> create restore point pdb1_restore_point_created guarantee flashback database;

create restore point pdb1_restore_point_created guarantee flashback database

*
ERROR at line 1:
ORA-38784: Cannot create restore point 'PDB1_RESTORE_POINT_CREATED'.
ORA-38785: Media recovery must be enabled for guaranteed restore point.

Como acaba de observar, es necesario para poder crear un punto de restauración, que el contenedor de base de datos este en modo archivelog.

SQL> connect / as sysdba
Connected.
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /opt/app/product/19c/dbs/arch
Oldest online log sequence     160
Current log sequence           162
SQL> shutdown immediate
Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.
Total System Global Area 1610609888 bytes
Fixed Size                  9135328 bytes
Variable Size            1056964608 bytes
Database Buffers          536870912 bytes
Redo Buffers                7639040 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL>

Listo. Con la base de datos en modo archivelog, vamos a forzar que toda transacción que se haga a nivel de base de datos, quede registrada. 

SQL> ALTER DATABASE FORCE LOGGING;

Database altered.

SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
YES

Aunque ya tengamos configurada nuestra base de datos para registro forzado de nivel transaccional, es necesario validar como se encuentran los tablespaces previamente creados.
 
SQL> select force_logging from dba_tablespaces;
FOR
---
YES
YES
NO
NO
NO


SQL> select tablespace_name, force_logging from dba_tablespaces;
TABLESPACE_NAME                FOR
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO

Como logras observar, no todos los tablespaces, están trabajando en modo forzado de registro transaccional. En el caso del tablespace de UNDO, el modo de facto de trabajo es FORCE LOGGING. En el caso de los tablespace temporales, no trabajan con esta característica.

Cambios el modo de trabajo del tablespace USES forzando el registro transaccional para todas las operaciones. 

SQL> alter tablespace users force logging;

Tablespace altered.

SQL>  select tablespace_name, force_logging from dba_tablespaces;
TABLESPACE_NAME                FOR
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       NO
TEMP                           NO
USERS                          YES

Como reiniciamos nuestro contenedor de base de datos y no hemos configurador salvar el estado OPEN de la instancias, vamos a abrir la instancia de RESTORE_POINT.
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBRMAN                        MOUNTED
         4 SECURITY                       READ WRITE NO
         6 RESTORE_POINT                  MOUNTED

SQL> alter pluggable database RESTORE_POINT open;

Pluggable database altered.

Con la siguiente instrucción, cada vez que reiniciemos el contenedor, la PDB RESTORE_POINT, pasara siempre a modo OPEN. 

SQL> alter pluggable database RESTORE_POINT save state;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBRMAN                        MOUNTED
         4 SECURITY                       READ WRITE NO
         6 RESTORE_POINT                  READ WRITE NO

Verifiquemos el estado de los tablespace de la PDB. 

SQL> alter session set container=RESTORE_POINT;

Session altered.

SQL> select tablespace_name, force_logging from dba_tablespaces;

TABLESPACE_NAME                FOR
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO
TBS_DATOS                      NO
TBS_DATOS_NOSEGUROS            NO
TBS_DATOS_SEGUROS              NO

8 rows selected.

Cambiamos el modo a registro transaccional forzado en todos los tablespaces.

SQL> alter tablespace users force logging;

Tablespace altered.

SQL> alter tablespace TBS_DATOS force logging;

Tablespace altered.

SQL> alter tablespace TBS_DATOS_NOSEGUROS  force logging;

Tablespace altered.

SQL> alter tablespace TBS_DATOS_SEGUROS  force logging;

Tablespace altered.

SQL> select tablespace_name, force_logging from dba_tablespaces;

TABLESPACE_NAME                FOR
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       NO
TEMP                           NO
USERS                          YES
TBS_DATOS                      YES
TBS_DATOS_NOSEGUROS            YES
TBS_DATOS_SEGUROS              YES

8 rows selected.

Ahora si, vamos a crear nuestro punto de restauración. 

SQL> SQL> show con_id
CON_ID
------------------------------
6

SQL> create restore point restore_point_pdb_create_RESTORE_POINT_db guarantee flashback database;

create restore point restore_point_pdb_create_RESTORE_POINT_db guarantee flashback database

*
ERROR at line 1:
ORA-38784: Cannot create restore point
'RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB'.
ORA-38786: Recovery area is not enabled.

Otro pre-requisito que es necesario. El área de recuperación, debe estar habilitada. En este caso, esto se resuelve dando un tamaño al parámetro DB_RECOVERY_FILE_DEST_SIZE.

SQL> connect / as sysdba

Connected.

SQL> show parameter recovery
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer 0
recovery_parallelism                 integer     0
remote_recovery_file_dest            string

SQL> alter system set db_recovery_file_dest_size=50G scope=both;

System altered.

SQL> host mkdir -p /opt/app/oracle/recovery_area

SQL> alter system set db_recovery_file_dest='/opt/app/oracle/recovery_area' scope=both;

System altered.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     161
Next log sequence to archive   163
Current log sequence           163

SQL> alter system checkpoint;

System altered.

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBRMAN                        MOUNTED
         4 SECURITY                       READ WRITE NO
         6 RESTORE_POINT                  READ WRITE NO

Ya tenemos todos los prerequisitos necesarios para crear nuestro punto de restauración.

SQL> alter session set container=RESTORE_POINT;
Session altered.

Como  lo vimos en el video del canal de Youtube, podemos tener dos tipos de restauración: Normales y Garantizados.

En este caso, vamos a crear un punto de restauración garantizado, en el PDB.

SQL> create restore point restore_point_pdb_create_RESTORE_POINT_db guarantee flashback database;

Restore point created.

También podríamos crear un punto de restauración conectados en el CDB para la base de datos acoplada RESTORE_POINT

SQL> connect / as sysdba
Connected.

SQL> create restore point restore_point_cdb_create_RESTORE_POINT_db for pluggable database RESTORE_POINT guarantee flashback database;

Ahora consultamos los dos puntos de restauración creados. 

SQL> @ver_restore_point.sql
NAME                                          TIME                                       SCN PDB GUA     CON_ID NAME_PDB
--------------------------------------------- ----------------------------------- ---------- --- --- ---------- ---------------
RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB     05-NOV-22 06.52.43.000000000 PM        5218861 YES YES          6 RESTORE_POINT
RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB     05-NOV-22 06.53.27.000000000 PM        5218891 YES YES          6 RESTORE_POINT

SQL> show con_id

CON_ID
------------------------------
1

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBRMAN                        MOUNTED
         4 SECURITY                       READ WRITE NO
         6 RESTORE_POINT                  READ WRITE NO

Vamos a generar el error. Vamos a borrar en el PDB el esquema de HR 

SQL> alter session set container=RESTORE_POINT;
Session altered.

SQL> drop user hr cascade;
User dropped.

Al realizar la operación, nos damos cuenta que cometimos un error.
Vamos a realizar la restauración utilizando alguno de los dos puntos creados previamente.

Primero, vamos a conectarnos al contenedor de base de datos y vamos a cerrar el PDB.

SQL> connect / as sysdba
Connected.
SQL> alter pluggable database RESTORE_POINT close;

Pluggable database altered.

SQL> @ver_restore_point.sql

NAME                                          TIME                                       SCN PDB GUA     CON_ID NAME_PDB
--------------------------------------------- ----------------------------------- ---------- --- --- ---------- ---------------
RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB     05-NOV-22 06.52.43.000000000 PM        5218861 YES YES          6 RESTORE_POINT
RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB     05-NOV-22 06.53.27.000000000 PM        5218891 YES YES          6 RESTORE_POINT

Vamos a utilizar el punto de restauración creado en el PDB, para hacer un FLASHBACK de la instancia acoplada.

SQL> flashback pluggable database RESTORE_POINT to restore point RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB;

Flashback complete.

Completado el Flashback, vamos a abrir en modo sólo lectura la PDB para verificar que el punto de restauración es el deseado y que el esquema HR, si se encuentra en el punto de restauración realizado.

SQL> alter pluggable database RESTORE_POINT open read only;

Pluggable database altered.

SQL> connect hr/hr@RESTORE_POINT
Connected.

SQL> select * from cat;
TABLE_NAME                               TABLE_TYPE
---------------------------------------- -----------
REGIONS                                  TABLE
COUNTRIES                                TABLE
LOCATIONS                                TABLE
LOCATIONS_SEQ                            SEQUENCE
DEPARTMENTS                              TABLE
DEPARTMENTS_SEQ                          SEQUENCE
JOBS                                     TABLE
EMPLOYEES                                TABLE
EMPLOYEES_SEQ                            SEQUENCE
JOB_HISTORY                              TABLE
EMP_DETAILS_VIEW                         VIEW
11 rows selected.

SQL> connect / as sysdba
Connected.

Al confirmar que el punto de restauración es el adecuado, cerramos el PDB y lo abrimos en modo de lectura y escritura, haciendo un reinicio de los redologs.

SQL> alter pluggable database RESTORE_POINT close;

Pluggable database altered.

SQL> alter pluggable database RESTORE_POINT open resetlogs;

Pluggable database altered.

Nos conectamos nuevamente a nuestra base de datos y la información esta nuevamente en su lugar.

SQL> connect hr/hr@RESTORE_POINT

Connected.

SQL> select * from cat;
TABLE_NAME                               TABLE_TYPE
---------------------------------------- -----------
REGIONS                                  TABLE
COUNTRIES                                TABLE
LOCATIONS                                TABLE
LOCATIONS_SEQ                            SEQUENCE
DEPARTMENTS                              TABLE
DEPARTMENTS_SEQ                          SEQUENCE
JOBS                                     TABLE
EMPLOYEES                                TABLE
EMPLOYEES_SEQ                            SEQUENCE
JOB_HISTORY                              TABLE
EMP_DETAILS_VIEW                         VIEW
11 rows selected.

SQL> select count(*) from employees;
  COUNT(*)
----------
       107

SQL>

Si ya no necesitamos los puntos de restauración, nos conectamos al CDB y desde ahí vamos a borrar cada uno de los puntos de restauración creados. 

SQL> connect / as sysdba
Connected.

SQL> @ver_restore_point.sql

NAME                                          TIME                                       SCN PDB GUA     CON_ID NAME_PDB
--------------------------------------------- ----------------------------------- ---------- --- --- ---------- ---------------
RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB     05-NOV-22 06.52.43.000000000 PM        5218861 YES YES          6 RESTORE_POINT
RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB     05-NOV-22 06.53.27.000000000 PM        5218891 YES YES          6 RESTORE_POINT

SQL> drop restore point "RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB" for pluggable database RESTORE_POINT;

Restore point dropped.

SQL> drop restore point "RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB" for pluggable database RESTORE_POINT;

Restore point dropped.

Ahora confirmamos que no existen puntos de restauración disponibles.

SQL> @ver_restore_point.sql
no rows selected

SQL>

Los puntos de restauración van incrementando su tamaño, según la cantidad de horas, días y semanas que permanezcan y el nivel transaccional que experimente los ambientes referenciados.

Tenga cuidado de agotar el espacio del área de recuperación, por excesivo tiempo de retención de los puntos de restauración.

Los puntos de restauración, no son parte de una estrategia de respaldos. Son parte de una estrategia temporal de DR. No debemos confundir, para que fueron creados.
 

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar