La integración de sistemas es una parte crucial para el correcto funcionamiento de los mismos, los sistemas no son islas que no tienen comunicación con otros sistemas internos y/o externos en nuestras empresas.
Esta integracion puede hacerse con capas de software sofisticadas como un BUS de Servicios etc, pero tambien puede hacerse desde dentro de la poderosisima Oracle Database.
Cuando el consumo esta en HTTP no es problema alguno, pero pongamosle una variable HTTPS, la cosa cambio.
Para solventar dicho impase, necesitamos 3 cosas
1)Un WALLET
2)El certificado de sitio del webservice.
3)Un Procedimiento de prueba para validar el funcionamiento.
Anotados los pasos
Definir el sitio o servicio web a consumir, para el caso usaremos https://www.oracle.com
0) Descarga del certificado para el laboratorio
Dirigirse al sitio, usar chrome de preferencia
Validar la información del sitio seguro
Validar la información del certificado
Cambiarse a la pestaña detalles, seleccionar ROOT arriba y abajo
Click en exportar y guardar con este nombre sitecertify.crt
Trasladar al servidor de base de datos donde se usara.
1) Creacion de un folder que contendra el wallet
El wallet no es nada más que eso , una cartera para guardar identidades.
2)Creacion del wallet con el tool orapki, existen mas tools para crear wallets, este está incluio varios productos Oracle.
[oracle@~]$ orapki wallet create -wallet /U01/app/oracle/admin/DB11G/wallet -pwd WalletPasswd123 -auto_login Oracle PKI Tool : Version 11.2.0.3.0 - Production Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
3) Importacion del certificado en base 64 (x509 ) del sitio web o del sitio que contiene el servicio en SSL usualmente se puede obtener del navegador cargando el sitio web, o con wget o CURL en un unix/linux
[oracle@~]$ orapki wallet add -wallet /U01/app/oracle/admin/DB11G/wallet -trusted_cert -cert "/home/oracle/sitecertify.crt" -pwd WalletPasswd123 Oracle PKI Tool : Version 11.2.0.3.0 - Production Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
los datos que se usaran dentro del plsql o bloque anonimo, ruta del wallet y password.
Requested Certificates: User Certificates: Trusted Certificates: Subject: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
5)y así la forma de invocarlo con un select sin bloque anonimo ni plsql.
SIN USAR EL WALLET: SQL> select utl_http.request('https://www.oracle.com', null,NULL,NULL) from dual; select utl_http.request('https://www.oracle.com', null,NULL,NULL) from dual * ERROR at line 1: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP", line 1530 ORA-29024: Certificate validation failure ORA-06512: at "SYS.UTL_HTTP", line 380 ORA-06512: at "SYS.UTL_HTTP", line 1470 ORA-06512: at line 1
usando el wallet
SQL> SET SERVEROUTPUT ON
select utl_http.request('https://www.oracle.com', null,'file:/U01/app/oracle/admin/DB11G/wallet','WalletPasswd123') from dual; SQL>
Instalación de Grid Infraestructure Oracle Restart en modo Silent 19c.
Esta guia complementa la serie de guias en modo no interactivo o silencioso como el caso del Clusterware 19c (https://www.linkedin.com/posts/ra%C3%BAl-antonio-molina-alvarenga-ocm-107b70b5_instalaci%C3%B3n-de-oracle-clusterware-y-oracle-activity-7096850034285006848-DsBD?utm_source=share&utm_medium=member_desktop).
Descargar el instalador que termina en grid_home.zip No usar el RPM
Para mi caso como estoy en una VM en la Nube de OCI , decsargue el ZIP usando wget, puede leerse de este otro articulo (https://www.linkedin.com/pulse/como-facilitar-la-descarga-de-instaladores-producto-ra%2525C3%2525BAl-antonio%3FtrackingId=gI%252BPQmIimPv0CIqefu0odA%253D%253D/?trackingId=gI%2BPQmIimPv0CIqefu0odA%3D%3D).
Podemos realizar la preparación con el modo automatico usando el rpm de pre rdbms o todos los pasos a mano, para el caso haremos todos los pasos a mano.
Este ultimo parametro (net.ipv4.ip_local_port_range = 9000 65500 ), puede o debe ser ajustado cuando hay instalaciones de Netbackup para respaldos de la vm o de la bd.
Moverse al directorio Desempacar software, yo puse el zip en /bkp, No olvidar cambiarse de usuario (su – grid) para las tareas del dueño del software , en mi caso es NUBE y no tengo forma de conectarme directamente, logeo con OPC con la PPK y luego salto a root y salto a grid.
cd /u01/app/19.0.0/grid/ unzip /bkp/gi19.zip
Guardar como grid.rsp en /home/grid
usaremos la forma silent con modo de solo instalación, configuraremos a manual el software para los componenes del oracle restart
[WARNING] [INS-32020] Installer has detected that the available disk space on the volume for the specified Oracle base location (/u01/app/grid) is less than the recommended value. ACTION: It is recommended that the volume for the Oracle base have at least 10 GB of available disk space. Choose a location that has sufficient available disk space or free up space on the existing volume. [WARNING] [INS-30100] Insufficient disk space on the selected location (/u01/app/19.0.0/grid). CAUSE: Specified location is on a volume without enough disk space on nodes: [instance-20231030-1410]. ACTION: Choose a location that has enough space (minimum of 6.9 GB) or free up space on the existing volume.
The response file for this session can be found at: /u01/app/19.0.0/grid/install/response/grid_2024-01-29_10-45-29PM.rsp
You can find the log of this install session at: /opt/oracle/oraInventory/logs/GridSetupActions2024-01-29_10-45-29PM/gridSetupActions2024-01-29_10-45-29PM.log
As a root user, execute the following script(s): 1. /u01/app/19.0.0/grid/root.sh
Execute /u01/app/19.0.0/grid/root.sh on the following nodes:
Successfully Setup Software with warning(s).
Ejecutar los scripts de root que indique el aviso.
[root@instance-20231030-1410 ~]# /u01/app/19.0.0/grid/root.sh Check /u01/app/19.0.0/grid/install/root_instance-20231030-1410_2024-01-29_22-49-03-943784137.log for the output of root script
Vamos a configurar los demonios del oracle restart con este script:
/u01/app/19.0.0/grid/crs/install/roothas.sh Using configuration parameter file: /u01/app/19.0.0/grid/crs/install/crsconfig_params The log of current session can be found at: /u01/app/grid/crsdata/instance-20231030-1410/crsconfig/roothas_2024-01-29_10-50-34PM.log
instance-20231030-1410 2024/01/29 22:51:16 /u01/app/grid/crsdata/instance-20231030-1410/olr/backup_20240129_225116.olr 724960844 2024/01/29 22:51:17 CLSRSC-327: Successfully configured Oracle Restart for a standalone server
Vamos a configurar las variables de ambiente para el Usuario dueño de la capa de software de GI.
vi .bash_profile export ORACLE_HOME=/u01/app/19.0.0/grid export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=+ASM
Cargar variables con . .bash_profile o iniciando sesion de nuevo
Consultar el estado de los componentes del oracle restart.
Nomenclatura permanente de los discos.
Se puede usar la guia para configuración de dispositivos con reglas permanentes (https://www.linkedin.com/pulse/reglas-de-udev-para-discos-asm-en-linux-aplica-rhel-y-ra%2525C3%2525BAl-antonio-%3FtrackingId=93UVkvP7bCQic0Q3efn4hA%253D%253D/?trackingId=93UVkvP7bCQic0Q3efn4hA%3D%3D)
Antes en versiones anteriores de RHEL o OEL, preferia usar el driver ASMLIB para el nombrado y permanencia de los dispositivos de Disco, pero en RHEL8.x ya no funciona y me quede esperando la version 3.x del driver, aun no me gusta usar AFD asi, que , prefiero usar Reglas de UDEV.
Consultar discos
fdisk -l | grep Disk | grep bytes
Disk /dev/sda: 50.0 GB, 50010783744 bytes, 97677312 sectors Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors Disk /dev/sdc: 53.7 GB, 53687091200 bytes, 104857600 sectors –> nuestro disco
vi /etc/udev/rules.d/96-asm.rules Grabamos y salimos
Recargamos la regla de udev para control de dispositivos de disco:
udevadm control –reload-rules udevadm trigger –type=devices –action=change
Encontramos el disco ya [root@instance-20231030-1410 ~]# ls -lL /dev/oracleasm/ total 0 brw-rw—-. 1 grid asmadmin 8, 32 Jan 30 01:21 ASM1 [root@instance-20231030-1410 ~]#
Como vimos ya tiene los permisos que todo device de asm debe tener desde 11.2, 660 y grid:asmadmin
Lo usamos:
establecemos la propiedad de discos para su descubrimiento en la ruta que la regla de udev lo dejo
Last login: Mon Jan 29 22:54:44 GMT 2024 on pts/0 [grid@instance-20231030-1410 ~]$ sqlplus / as sysasm
SQL*Plus: Release 19.0.0.0.0 – Production on Tue Jan 30 01:22:35 2024 Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production Version 19.3.0.0.0
SQL> show parameter string
NAME TYPE VALUE
asm_diskstring string SQL> alter system set asm_diskstring=’/dev/oracleasm/*’;
System altered.
SQL> select path from v$asm_Disk;
PATH
/dev/oracleasm/ASM1
SQL>
Crear diskgroup
SQL> create diskgroup data external redundancy disk ‘/dev/oracleasm/ASM1’;
Un día de estos me cruce con una situación en la que obtuve corrupción de bloques en una BD productiva muy grande e importante, bastante preocupante la situación, no daré detalles, pero se estuvo bajo mucha presión (LOL).
Porque es importante tener todos los bloques de datos marcados como limpios y no como corruptos?, obvio el acceso a los datos y el uso de indices.
Pero porque es importante limpiar bloques vacios?, porque a pesar de ser bloques vacios, el diccionario los conoce como corruptos y no se puede tener un backup rman 100% fiable.
Dicho esto, Lo importante en la definición de la solución fue lo siguiente para solventar corrupción en:
Bloques de datos en tablas , poder prescindir de ellos, o restaurar de un backup la tabla
Bloques de datos en indices, reconstruir el indice
Bloques Vacíos, yo pensaba que era solo ignorarlos, pero no.
En este ultimo aspecto, necesitaba se limpiaran, para poder dar el OK del datafile o de los datafiles afectados.
Encontré una nota de MOS:
Use RMAN to format corrupt data block which is not part of any object (Doc ID 1459778.1)
Haciendo la revision se encontro que los bloques que aparecen marcados como corruptos, son bloques vacios.
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
—- —— ————– ———— ————— ———-
68 FAILED 0 129 4194293 10192968188924
File Name: /archives/datafile_archivo_datats_12
Block Type Blocks Failing Blocks Processed
———- ————– —————-
Data 1 3443658
Index 0 461648
Other 29 288837
validate found one or more corrupt blocks
See trace file /u01/app/oracle/diag/rdbms/bd/BD/trace/BD_ora_21367.trc for details