infra: Clonar contraloría

Paso0: Poner el tiquete en antención

  • El primer paso en poner el tiquete en antención para que el usuario sepa que va a iniciar el proceso

Paso1: conectarse al servidor

  • Conectarse al servidor r/Oracle01
ssh sigesadesa.una.ac.cr -l root
  • No conectarnos con el osuario oracle
su – oracle
  • Establecemos la variable de SID de la base de datos
export ORACLE_SID=CCONTRA

Paso2: clonar

  • Identificamos el respaldo
ls -ltrh /respaldos/rman/SIGESA
  • Y lo guardamos en un block de notas, ejemplo
02:55 CNTRL_CUNA01_20250116_c-2894181579-20250116-03.back
  • Nos vamos a esta ruta y editamos el archivo
cd /home/oracle/scripts
nano restore.rman
  • Modificamos el archivo con el archivo y la hora del respaldo mas 2 minutos
  • Ingresasmos a sql
sqlplus / as sysdba
  • Comprobamos que estamos en la base de datos correcta
 show pdbs;
  • Si es correcta ejecutamos
shut immediate
startup restrict mount
show parameters control_file
  • Borramos la base de datos
drop database;
exit
  • Eliminar las rutas del la base de datos:
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
cd /home/oracle/scripts/
rman target / @restore.rman

Paso3: configurar instancia

  • Conectarse al servidor r/Oracle01
ssh sigesadesa.una.ac.cr -l root
  • No conectarnos con el osuario oracle
su – oracle
  • Establecemos la variable de SID de la base de datos
export ORACLE_SID=CCONTRA
  • Ingresasmos a la dirección
cd /home/oracle/scripts
  • Ingresamso a sqlplus
sqlplus / as sysdba
  • y vemois que se lalma SIGESA
show pdbs;
  • Resultado
  • para renombrarla
exit
  • Ingresamos a
 cd /home/oracle/scripts
  • Ingresamos a sql
 sqlplus / as sysdba
  • Y ejecutamos
@CONTRALORIA.sql
  • Resultado
  • ejecutamos
show pdbs;
  • Resultado
  • Modificamos la sesión para que estemos en la BD CONTRALORIA
alter session set container=CONTRALORIA;
  • Resultado
  • Y ejecutamos los siguientes alter user que modifican las contraseñas de 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;
  • Esto tambien lo podemos ejecutar en la conexión de SQL Developer
  • Ejecutamos los siguientes updates que modifican datos sensibles
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;
  • Le damos ENTER hasta que salga el commit
  • Cambiar el dblink de BANNER9 a QA
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;
  • Creamos 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;

  • 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;
  • Liberamos mas espacio de tablas de RHU (no ejecuitar en DESA02 o DESA08)
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;
  • Disminuir los tablespace
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;
/
  • Este script retorna una serie de resultados copiamos todos los que dierón error
  • Los modificamos para ponerles 300m y punto y coma ejemplo y lo ejecutamos
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CCONTRA/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_tab_06_mrm347y5_.dbf' RESIZE 300M;
ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CCONTRA/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_auditori_mrm339hd_.dbf' RESIZE 300M;
  • Luego de arriba a abajo como el 10 registro dice «undotbs2» lo copiamos ya que la utilizaremos mas adelante
Exitoso:ALTER DATABASE DATAFILE
'/u02/app/oracle/oradata/CCONTRA/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf
_undotbs2_mrm1xc4d_.dbf' RESIZE 3M

Eliminar UNDOTBS2

    • salimos
    exit
    • ingresamos
    su - oracle
    export ORACLE_SID=CCONTRA
    sqlplus / as sysdba
    show pdbs;
    • Ejecutamos
    • Esto:
      • Detiene la BD
      • La monta para poder modificar los archivos de configuración y no aceptar configuraciones
      • Habilita los logs
    Shut immediate
    Startup mount
    ALTER DATABASE ARCHIVELOG;
    • Resultado
    • Luego modificamos la sesion
    alter session set container=CONTRALORIA;
    • y luego con la información del segundo que habiamos guardado
    Exitoso:ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CCONTRA/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_undotbs2_mkfm2987_.dbf' RESIZE 3M
    • lo que ocupamos es la dirección del archivo
    '/u02/app/oracle/oradata/CCONTRA/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_undotbs2_mrm1xc4d_.dbf'
    • vamos a modificar esta linea
    # Formato
    ALTER DATABASE DATAFILE 'ruta_archivo' OFFLINE
    
    # Ejemplo
    ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/CCONTRA/DBF260BEDF5248BAE0539703000AFE64/datafile/o1_mf_undotbs2_mrm1xc4d_.dbf' OFFLINE;
    • Resultado
    • Ahora salimos
    exit
    • Y volvemos a ingresar
    sqlplus / as sysdba
    • Verificamos que estamos en CONTRALORIA
    show pdbs;
    • Y mandamos a abrir la base de datos
    ALTER DATABASE OPEN;
    • Modificamos la sesión
    alter session set container=CONTRALORIA;
    • Y eliminamos el UNDOTBS2
    DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;
    • Salimos
    exit
    • Volvemos a ingresar
    sqlplus / as sysdba
    • Detenemos
    SHUT IMMEDIATE;
    • y la levantamos
    STARTUP;

    Recrear el UNDO

    • Continuando modificamos la sesión
    alter session set container=CONTRALORIA;
    • 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;
    
    Drop tablespace UNDOTBS1 including contents and datafiles; 
    
    • Salimos
    exit
    • Reiniciamos la BD
    sqlplus / as sysdba
    show pdbs;
    
    Shut immediate
    
    Startup

    Paso4: Verificar conexión de BD en SQL Developer

    • Ha este punto podemos verificar que la BD esta funcional en SQL Developer
    • Solo ver que conectar

    Paso5: Deploy aplicación de producción

    • Ahora para el caso de contraloría como acabamos de clonar la BD de producción
    • Debemos hacer lo mismo de la aplicación ya que pueden tener versiones diferentes
    • El servidor de desa es el siguiente, ha este es el que le vamos a actualizar la aplicación
    Nombre: SIGESA-CONTRALORIA
    DNS: test-contra.una.ac.cr
    IP: 10.0.2.15
    • Para obtener la aplicación lo vamos hacer desde cualquier nodo de producción
    • Por ejemplo
    Nombre: SIGESA-PROD01
    IP: 10.0.2.153
    • para esto nos conectamos al servidor c/u
    ssh 10.0.2.15 -l cgi
    • Ingresamos con el usuario tomcat t/u4t
    su - tomcat8
    • esto ingresa al directorio /tomcat8
    • Detenemos el tomcat
    ./bin/shutdown.sh
    • Removemos los logs
    rm -rf logs/* temp/* work/* application*.gz
    • Y ingresamos al directorio webapps para borrar la aplicación
    cd /tomcat8/webapps/
    • Si listamos
    ls
    • Observamos el directorio y el .war de sigesa-webapp
    • Asi es como se debe llamar para contraloría
    • Por lo tanto lo eliminamos
    rm -rf sigesa-webapp*
    • Y obtenemos el .war de SIGESA-PROD01 y lo renombramos
    • pero para hacer esto primero debemos saber el numero de deploy del war en producción
    • para esto podemos ejecutar t/u4t
    ssh tomcat8@10.0.2.153 "ls /tomcat8/webapps"
    • Esto nos retorna el listado y el nombre del war que ocupamos
    • Ya con esto modificamos la siguiente instrucción
    # Formato
    scp tomcat8@10.0.2.153:/tomcat8/webapps/nombre_archivo.war sigesa-webapp.war
    
    # Ejemplo
    scp tomcat8@10.0.2.153:/tomcat8/webapps/sigesa-webapp-1.0.0-SNAPSHOT##1874.war sigesa-webapp.war
    • Regresamos de directorio
    cd ..
    • Verificamos que el servidor tomcat esta apagado y no existen procesos
    ./bin/shutdown.sh 
    ps -ef |grep tomcat
    rm -rf logs/* temp/* work/* application*.gz
    • Iniciamos el servidor
    ./bin/startup.sh
    • Y verificamos que levanta
    tail -f logs/catalina.out
    • Verificamos que la aplicación este levantando

    https://test-contra.una.ac.cr/sigesa-webapp/security/login.xhtml

    • Y listo

    Paso6: actualizar archivo control de clonaciones

    Paso7: cerrar el Tiquete

    • Reponder el tiquete
    Clonación éxitosa