infra: clonación sigesa

NOTA: Ejecutar en CONSOLA DB

  • Para realizar el proceso de clonación el coordinador debe solicitarlo y avisarle a los usuarios
  • ingresamos al servidor de bd (ac12)
ssh sigesadesa.una.ac.cr -l root
  • Ingresamos con el usuario oracle
su - oracle
  • Ambientarse en la base quie corresponda
# Desarrollo
export ORACLE_SID=CDESA01
export ORACLE_SID=CDESA02
export ORACLE_SID=CDESA03
export ORACLE_SID=CDESA04
export ORACLE_SID=CDESA05
export ORACLE_SID=CDESA06
export ORACLE_SID=CDESA07
export ORACLE_SID=CDESA08

# contra
export ORACLE_SID=CCONTRA
  • Identificar el respaldo en la ruta: /respaldos/rman/SIGESA, por medio del control FILE, el control file es el archivo que pesa 20 M aprox, generalmente se llama: CNTRL_CUNA01_20221203_c-2894181579-20221203-08.back y se debe elegir el de la misma fecha el respaldo del archivo FULL_CUNA01_…, en este caso el último:
ls -ltrh /respaldos/rman/SIGESA
  • Es el CNTRL que tenga la misma hora que el respaldo FULL
  • Lo compiamos en uin bloquie de notas
CNTRL_CUNA01_20241210_c-2894181579-20241210-03.back
  • Con ese nombre ir a la ruta: /home/oracle/scripts y editar el archivo restore.rman
cd /home/oracle/scripts

nano /home/oracle/scripts/restore.rman
  • Archivo original
startup nomount;
restore controlfile from '/respaldos/rman/SIGESA/CNTRL_CUNA01_20241003_c-2894181579-20241003-05.back';
alter database mount;
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;
catalog start with '/respaldos/rman/SIGESA/' noprompt;
crosscheck copy;
delete noprompt expired copy;
restore database;
run{
    	set until time "trunc(sysdate)+3/24+12/1440";
        recover database;
}
alter database open resetlogs;
delete noprompt archivelog all;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
  • Aquí debemos debemos modificar el nombre del archivo a restaurar
  • Ademas debemos modificar el tiempo del respaldo
  • si nos recordamos el respando se dio a las 2:37
  • entonces debemos agregarle 2 minutos a la la hora que se genero el respaldo
  • es decir a las 2:39
  • entonces en el archivo
  • así

borrar base de datos anterior

  • Ahora que ya tenemos listo para poder clonar de producción
  • Debemos eliminar la BD que vamos a clonar
  • Primero nos ambientamos
ssh sigesadesa.una.ac.cr -l root
su - oracle
  • ambientarse
# Desarrollo
export ORACLE_SID=CDESA01
export ORACLE_SID=CDESA02
export ORACLE_SID=CDESA03
export ORACLE_SID=CDESA04
export ORACLE_SID=CDESA05
export ORACLE_SID=CDESA06
export ORACLE_SID=CDESA07
export ORACLE_SID=CDESA08

# contra
export ORACLE_SID=CCONTRA
sqlplus / as sysdba
  • Y comprobamos
show pdbs;
  • Resultado
  • Detenemos la BD
shut immediate
  • Resultado
  • la levantamos restringida
startup restrict mount
  • Resultado
  • Mostramos los parametros
show parameters control_file
  • Resultado
  • Borramos la BD
drop database;
  • Resultado
  • Salimos
exit
  • Eliminar las rutas de la BD
rm -rf /u02/app/oracle/oradata/${ORACLE_SID}/*
rm -rf /u02/app/oracle/fast_recovery_area/${ORACLE_SID}
rm -rf /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/lk${ORACLE_SID}
rm -rf /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/hc_${ORACLE_SID}.dat
  • Eliminar de la ruta /respaldos/rman/SIGESA/ donde se guarda el respaldo de sigesa, cualquier archivo que sea anterior al día que se va a realizar la recuperación
find /respaldos/rman/SIGESA/ ! -newermt $(date +%Y%m%d) | xargs  rm -f ;

Lanzar rman

  • Crear la clonación
cd /home/oracle/scripts/
rman target / @restore.rman

ERROR 01: Tamaño db_recovery

  • Nota si da el siguiente error

Mismo dia

  • Ejecutar desde la consola si es el mismo dia si no esto no sirve
sqlplus / as sysdba
Alter system set db_recovery_file_dest_size=20G scope=memory;
exit;
  • Y luego esto
rman target /
Recover database;

Otro día

  • Debe borrar la BD
  • Y volver a empezar el instructivo

Error 02: Incarnation

  • Si da alguno de los siguientes errorres relacionados con el incarnation, significa que SIGESA-PROD y DESA0X tiene incarnations diferentes :
- ORA-19912: cannot recover to target incarnation 3
- RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time
  • Revisar tanto PROD como DESA0X el CURRENT del Incarnation sea el mismo por medio del RMAN, ejecutar en ambos:
rman target /
list incarnation;
  • Comparar ambas salidas y revisar que el CURRENT esté en el mismo número (Columna DB ID):
  • Sino está en el mismo número, ejecutar el siguiente comando con el mismo número del CURRENT de PROD en el servidor de DESA0X:
reset database to incarnation 2;
exit
  • Modificar el restore.rman para que inicie en la lista de restore database;
  • abrimos el archivo
nano /home/oracle/scripts/restore.rman
  • Asi
#startup nomount;
#restore controlfile from '/respaldos/rman/SIGESA/CNTRL_CUNA01_20241210_c-2894181579-20241210$
#alter database mount;
#CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;
#catalog start with '/respaldos/rman/SIGESA/' noprompt;
#crosscheck copy;
#delete noprompt expired copy;
restore database;
run{
    	set until time "trunc(sysdate)+2/24+39/1440";
        recover database;
}
alter database open resetlogs;
delete noprompt archivelog all;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
  • Y volvemos a ejecutar el comando
rman target / @restore.rman

Paso 2: Configuración Posterior

  • Cuando el proceso de rman termina se debe verificar su estado
  • Nos ambientamos
ssh sigesadesa.una.ac.cr -l root
su - oracle
  • ambientarse
# Desarrollo
export ORACLE_SID=CDESA01
export ORACLE_SID=CDESA02
export ORACLE_SID=CDESA03
export ORACLE_SID=CDESA04
export ORACLE_SID=CDESA05
export ORACLE_SID=CDESA06
export ORACLE_SID=CDESA07
export ORACLE_SID=CDESA08

# contra
export ORACLE_SID=CCONTRA
  • Ingresamos
sqlplus / as sysdba
  • Ver si la base quedó abierta
show pdbs;
  • Podemos obversar que la BD se llama SIGESA que es la que clonamos de producción
  • Salimos
exit
  • Entonces debemos cambiarle el nombre de la base de datos con los scripts que se encuentran en la ruta /home/oracle/scripts
  • Ingresamos a
cd /home/oracle/scripts
  • Estos son los archivos
  • El contenido es el siguiente
alter pluggable database SIGESA close immediate instances=all;
alter pluggable database SIGESA open read write restricted;
alter session set container=SIGESA;
alter pluggable database SIGESA rename global_name to DESA01;
alter session set container=cdb$root;
alter pluggable database DESA01 close immediate;
alter pluggable database DESA01 open read write instances=all;
  • Volvemos a ingresar
sqlplus / as sysdba
  • entonces dependiendo de la BD clonada seleccionamos el correspondiente
@DESA01.sql
@DESA02.sql
@DESA03.sql
@DESA04.sql
@DESA05.sql
@DESA06.sql
@DESA07.sql
@DESA08.sql

@CONTRALORIA.sql
  • Resultado
  • volvemos a ejecutar para comprobar
show pdbs;
  • Resultado
  • Nos cambiamos al contenedor correspondiente
ALTER SESSION SET CONTAINER=DESA01;
ALTER SESSION SET CONTAINER=DESA02;
ALTER SESSION SET CONTAINER=DESA03;
ALTER SESSION SET CONTAINER=DESA04;
ALTER SESSION SET CONTAINER=DESA05;
ALTER SESSION SET CONTAINER=DESA06;
ALTER SESSION SET CONTAINER=DESA07;
ALTER SESSION SET CONTAINER=DESA08;

ALTER SESSION SET CONTAINER=CONTRA;
  • Resultado

Modificar datos (partametros)

  • NOTA: recuerde darle ENTER hasta llegar al final de las sentencias
  • Ejecutar script de cambio de contraseñas para los usuarios:
alter user system identified by dba4desa;
alter user system account unlock;
alter user sys identified by dba4desa;
alter user sys account unlock;
alter user sysman identified by dba4desa;
alter user sysman account unlock;
alter user adm identified by sigesa2015;
alter user adm account unlock;
alter user www_sigesa identified by sigesa2015;
alter user www_sigesa account unlock;
  • ejecutar el script de cambios a parámetros y configuraciones generales
update usuario set clave = '$2a$10$rIhwk3WpjvYoz6dboLa5We33qzrwOcPWn3YnQJDcv.PZePQ3spU7a', correo = 'a@gmail.com';
update persona_correo set correo_electronico = id_persona_correo || '@gmail.com';
update parametro set valor='a@gmail.com' where llave='param_rhu_fmo_email_copia_instancias_notificacion_fin_labores';
Insert into USUARIO_ROL (ID_USUARIO_ROL,USUARIO,ROL,NOTAS,ESTADO,FECHA_CREACION,USUARIO_CREACION,FECHA_MODIFICACION,USUARIO_MODIFICACION,VERSION,CAMPO_CONFIGURABLE,FECHA_DESDE,FECHA_HASTA) values (SQ_USUARIO_ROL.nextval,'1','9747',null,'1',to_date('30/04/15','DD/MM/RR'),'1',to_date('30/04/15','DD/MM/RR'),'1','0',null,to_date('15/06/16','DD/MM/RR'),to_date('31/12/25','DD/MM/RR'));
update persona_telefono set telefono = id_persona_telefono;
update parametro set valor = 'sergio.campos.rodriguez@una.cr' where id_parametro in (3603,814,10091,10090,6078,5518,3242,4678,5878);
update parametro set valor = replace(valor, '/NFS', '') where id_parametro in (1409,942,9200);
update parametro set valor = 'SIGESA PRUEBAS<sigesa@una.ac.cr>' where id_parametro = 944;
update parametro set valor = '@una.cr' where llave = 'param_epf_feh_factura_electronica_mail';
update EME.persona_general_historica set correo_electronico = concat(id_persona_general_historica,'@gmail.com');
update EME.persona_general_temporal set correo_electronico = concat(id_persona_general_temporal,'@gmail.com');
update TEUNA.estudiantes_banner set correo = concat(ROWNUM, '@gmail.com');
update parametro set valor = 'http://documentosdesa.una.ac.cr/alfresco/api/-default-/public/alfresco/versions/1/' where llave = 'param_sdkuna_alfresco_server';
update parametro set valor = 'http://documentosdesa.una.ac.cr/alfresco/cmisatom' where llave = 'param_sdkuna_alfresco_server_cmisatom';
UPDATE "SAS"."PARAMETRO" SET VALOR = 'http://documentosdesa.una.ac.cr/alfresco/api/-default-/public/authentication/versions/1' WHERE LLAVE = 'param_sdkuna_alfresco_rest_auth';
UPDATE "SAS"."PARAMETRO" SET VALOR = 'http://documentosdesa.una.ac.cr/alfresco/api/-default-/public/alfresco/versions/1' WHERE LLAVE = 'param_sdkuna_alfresco_rest_core';
UPDATE "SAS"."PARAMETRO" SET VALOR = 'http://documentosdesa.una.ac.cr/alfresco/api/-default-/public/search/versions/1' WHERE LLAVE = 'param_sdkuna_alfresco_rest_search';
UPDATE "SAS"."PARAMETRO" SET VALOR = '4afe563e-3bf4-4b4a-abcc-4c4dee44c731' WHERE LLAVE = 'param_sdkuna_alfresco_rest_root_repository_id';
UPDATE "SAS"."PARAMETRO" SET VALOR = 'a21b89a8-9a18-4763-9430-e78ff2ace722' WHERE LLAVE = 'param_sdkuna_alfresco_rest_plantillas_folder_id';
UPDATE "SAS"."PARAMETRO" SET VALOR = '6a2b132c-83cc-4a77-8967-3938df416499' WHERE LLAVE = 'param_sdkuna_alfresco_rest_factura_electronica_folder_id';
UPDATE "SAS"."PARAMETRO" SET VALOR = '91ec5cd5-b63b-4374-8067-7f75e2e12d4c' WHERE LLAVE = 'param_sdkuna_alfresco_rest_constancias_folder_id';
UPDATE "SAS"."PARAMETRO" SET VALOR = '91ec5cd5-b63b-4374-8067-7f75e2e12d4c' WHERE LLAVE = 'param_sdkuna_alfresco_rest_constancias_folder_id';
update parametro set valor = 'TEUNA UNA<sigesapruebas@una.ac.cr>' where id_parametro = 12467;
commit;
  • Darle ENTER hasta que salga el commit
  • Cambiar el dblink de BANNER9 a TRNG
DROP PUBLIC DATABASE LINK BANNER9;
CREATE PUBLIC DATABASE LINK BANNER9
CONNECT TO baninst1 IDENTIFIED  BY u_pick_it
USING '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = bannerdesa.una.ac.cr)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = qa.una.ac.cr)))';
commit;
  • Hasta que salga el commit
  • Crear los roles de desarrollo:
CREATE ROLE DESARROLLO NOT IDENTIFIED;
GRANT CREATE SESSION TO DESARROLLO;
GRANT ALTER ANY INDEX TO DESARROLLO;
GRANT ALTER ANY SEQUENCE TO DESARROLLO;
GRANT ALTER ANY TABLE TO DESARROLLO;
GRANT ALTER ANY TRIGGER TO DESARROLLO;
GRANT ALTER SESSION TO DESARROLLO;
GRANT ALTER USER TO DESARROLLO;
GRANT AUDIT ANY TO DESARROLLO;
GRANT COMMENT ANY TABLE TO DESARROLLO;
GRANT CREATE ANY INDEX TO DESARROLLO;
GRANT CREATE ANY JOB TO DESARROLLO;
GRANT CREATE ANY MATERIALIZED VIEW TO DESARROLLO;
GRANT CREATE ANY SEQUENCE TO DESARROLLO;
GRANT CREATE ANY SYNONYM TO DESARROLLO;
GRANT CREATE ANY TABLE TO DESARROLLO;
GRANT CREATE ANY TRIGGER TO DESARROLLO;
GRANT CREATE ANY VIEW TO DESARROLLO;
GRANT CREATE DATABASE LINK TO DESARROLLO;
GRANT CREATE JOB TO DESARROLLO;
GRANT CREATE LIBRARY TO DESARROLLO;
GRANT CREATE MATERIALIZED VIEW TO DESARROLLO;
GRANT CREATE PROCEDURE TO DESARROLLO;
GRANT CREATE PUBLIC DATABASE LINK TO DESARROLLO;
GRANT CREATE PUBLIC SYNONYM TO DESARROLLO;
GRANT CREATE ROLE TO DESARROLLO;
GRANT CREATE SEQUENCE TO DESARROLLO;
GRANT CREATE ANY SYNONYM TO DESARROLLO;
GRANT CREATE ANY TABLE TO DESARROLLO;
GRANT CREATE ANY PROCEDURE TO DESARROLLO;
GRANT CREATE ANY TRIGGER TO DESARROLLO;
GRANT CREATE ANY VIEW TO DESARROLLO;
GRANT CREATE DATABASE LINK TO DESARROLLO;
GRANT CREATE JOB TO DESARROLLO;
GRANT CREATE LIBRARY TO DESARROLLO;
GRANT CREATE MATERIALIZED VIEW TO DESARROLLO;
GRANT DELETE ANY TABLE TO DESARROLLO;
GRANT DROP ANY TRIGGER TO DESARROLLO;
GRANT DROP ANY VIEW TO DESARROLLO;
GRANT DROP PUBLIC DATABASE LINK TO DESARROLLO;
GRANT DROP PUBLIC SYNONYM TO DESARROLLO;
GRANT DROP USER TO DESARROLLO;
GRANT EXECUTE ANY PROCEDURE TO DESARROLLO;
GRANT EXECUTE ANY PROGRAM TO DESARROLLO;
GRANT FLASHBACK ANY TABLE TO DESARROLLO;
GRANT INSERT ANY TABLE TO DESARROLLO;
GRANT SELECT ANY DICTIONARY TO DESARROLLO;
GRANT SELECT ANY SEQUENCE TO DESARROLLO;
GRANT UPDATE ANY TABLE TO DESARROLLO;
commit;
  • hasta commit
  • truncar las tablas grandes de RHU para liberar espacio
truncate table rhu.concepto_resultado_recal;
truncate table rhu.concepto_resultado_val_re;
truncate table sas.registro_recurso;
  • Deben salir 3 truncate

NOTA: No ejecutar en DESA02 Y DESA08

  • Elimina las tablas de RHU para liberar espacio sólo  (Son las bases de datos que usa RH)
truncate table rhu.concepto_resultado_valor; 
ALTER TABLE RHU.CONCEPTO_RESULTADO_VALOR MODIFY CONSTRAINT FK_CONCEPTO_R_CONCEPTO_RE_4 DISABLE;
truncate table rhu.concepto_resultado;
ALTER TABLE RHU.CONCEPTO_RESULTADO_VALOR MODIFY CONSTRAINT FK_CONCEPTO_R_CONCEPTO_RE_4 ENABLE;
commit;
  • Resultado (hastas commit)

Continuamos

  • Disminuir los tablaspace ejecutando el siguiente script:
set serveroutpu on;
BEGIN
    FOR r IN (select 'ALTER DATABASE DATAFILE '''||file_name||''' RESIZE '||smallest_mb||'M' str
              from (
                SELECT file_name,
                       CEIL ((NVL (hwm, 1) * t.block_size) / 1024 / 1024) smallest_mb,
                       CEIL (blocks * t.block_size / 1024 / 1024) current_mb
                  FROM dba_data_files a,
                       dba_tablespaces t,
                       (SELECT   file_id, MAX (block_id + blocks - 1) hwm
                            FROM dba_extents
                        GROUP BY file_id) b
                 WHERE t.tablespace_name = a.tablespace_name
                 AND a.file_id = b.file_id(+)
            )where current_mb-smallest_mb>=10
    ) LOOP
      begin
          EXECUTE IMMEDIATE r.str ;
            dbms_output.put_line('Exitoso:'||r.str);
          EXCEPTION
              WHEN OTHERS THEN
                 dbms_output.put_line('ERROR RESIZE EJECUTE MANUALMENTE:'||r.str);
      end;
  END LOOP;
END;
/
  • Resultado
  • Ahora si vemos los resultados vamos a encontrar que algunos dierón error
  • Para repararlas las copiamos y pegamos en un bloc de notas
  • Eliminando los saltos del linea y en el tamaño poner 300M y finalizando con punto y coma ‘;’
  • Así por ejemplo
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CDESA07/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_ind_06_mqr9v0m6_.dbf' RESIZE 300M;
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CDESA07/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_tab_06_mqrb042t_.dbf' RESIZE 300M;
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CDESA07/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_ind_06_mqr9v7vh_.dbf' RESIZE 300M;
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CDESA07/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_auditori_mqr9yknl_.dbf' RESIZE 300M;
  • Y los mandamos a ejecutar
  • Ahora debemos ir del primer registro hacia abajo y contar como 10 registros y vamos a encontrar uno que dice algo como «undotbs2»
  • Igual copiamos la direción en el bloc de notas por que mas tarde la vamos a utilizar
  • Ejemplo
'/u02/app/oracle/oradata/CDESA07/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_undotbs2_mqr8tlhj_.dbf'

ELIMINAR UNDOTBS2

  • Salimos
exit
  • Ingresamos
sqlplus / as sysdba
  • Verificamos
show pdbs;
  • Detenemos
Shut immediate
  • Montamos
Startup mount
  • alteramos
ALTER DATABASE ARCHIVELOG;
  • Ahora como vamos a modificar datos debemos hacer uin alter session
alter session set container=DESA01;
alter session set container=DESA02;
alter session set container=DESA03;
alter session set container=DESA04;
alter session set container=DESA05;
alter session set container=DESA06;
alter session set container=DESA07;
alter session set container=DESA08;
  • Y ahora montamos la instrucción alter para ponerlo offline
  • Esto es con la ruta del undotbs2 que tenemos en el bloc de notas
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CDESA01/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_undotbs2_mok2nh25_.dbf' OFFLINE;
  • Resultado
  • salimos
exit
  • y volvemos a ingresar
sqlplus / as sysdba
  • Abrimos la base de datos
ALTER DATABASE OPEN;
  • vamos a modificar datos entonces hacemos aslter session
alter session set container=DESA01;
alter session set container=DESA02;
alter session set container=DESA03;
alter session set container=DESA04;
alter session set container=DESA05;
alter session set container=DESA06;
alter session set container=DESA07;
alter session set container=DESA08;
  • ejecutamos
DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;
  • Salimos
exit
  • Volvemos a ingresar
sqlplus / as sysdba
  • Detenemos
SHUT IMMEDIATE;
  • Y volvemos a levantar
STARTUP;
  • Recreamos el undo
  • para esto vanmos a modificar datos por tanto alter
alter session set container=DESA01;
alter session set container=DESA02;
alter session set container=DESA03;
alter session set container=DESA04;
alter session set container=DESA05;
alter session set container=DESA06;
alter session set container=DESA07;
alter session set container=DESA08;
  • ejecutamos
CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE SIZE 64M AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED ONLINE RETENTION NOGUARANTEE BLOCKSIZE 8K FLASHBACK ON;
ALTER SYSTEM SET UNDO_TABLESPACE= UNDOTBS2 Scope=both;
  • Este puede que se tenga que ejcutar varias veces
Drop tablespace UNDOTBS1 including contents and datafiles; 
  • Salimos
exit
  • Volvemos a ingresar
sqlplus / as sysdba
  • ahora debemos reiniciar la BD
  • la detenemos
Shut immediate
  • Y la iniciar
Startup

Aplicar solo desa02

shut immediate
startup mount
alter database noarchivelog; 
alter database open;

// Si fuera necesario revertirlo
shut immediate
startup mount
alter database archivelog; 
alter database open;

Probar funcionamiento

  • ingresamos a SQLdeveloper y abrimos conexion la BD y ejecutamos el siguiente select
select * from persona_correo;
  • Si todo salió bien salimos
exit
  • Cerramos el caso
Buenas tardes/días se le informa que el proceso de clonación de la base de datos DESA07 a concluido de forma correcta.