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
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
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
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
Podemos obversar que la BD se llama SIGESA que es la que clonamos de producción
Entonces debemos cambiarle el nombre de la base de datos con los scripts que se encuentran en la ruta /home/oracle/scripts
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;
entonces dependiendo de la BD clonada seleccionamos el 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
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 330M
Así
Y los mandamos a ejecutar
Ahora debemos del primer registro hacia abajo
contar como 10 registros y vamos a encontrar uno que dice algo como «undotbs2»
Igual lo vamos a copiar en el bloc de notas por que mas tarde la vamos a utilizar
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