🔬 shape_lib en Oracle 19c: cómo sobrevivir al parcheo sin perder tu geometría

Por La Botica del DBA | Oracle


🧪 Introducción boticaria

En la botica del DBA, cada componente tiene su lugar, como en una antigua farmacia donde cada frasco tiene su fórmula precisa. En el mundo de Oracle Spatial, shape_lib es ese ingrediente activo que, si se pierde tras un parcheo, puede hacer que tu entorno GIS se vuelva disfuncional.

Este no es un simple parche. Estamos hablando de Oracle RAC 19c sobre OCI, con bases multitenant (CDB/PDB), Fleet Patching, y external procedures. Cuando el sistema se parchea, y tus funciones espaciales desaparecen... no necesitás suerte: necesitás bisturí técnico y diagnóstico boticario.


🌍 ¿Qué es una Spatial Database?

En la botica del DBA también almacenamos mapas, coordenadas, geometrías y redes. Una Spatial Database no es más que una base de datos que sabe de territorio, caminos y posiciones: almacena, consulta y analiza datos espaciales y geoespaciales.

En el mundo Oracle, esta capacidad cobra vida gracias a Oracle Spatial and Graph, una extensión nativa de Oracle Database, plenamente soportada en la versión 19c, que convierte tu base en un verdadero sistema de información geográfica (GIS) empresarial.

🧠 ¿Qué permite hacer Oracle Spatial and Graph?

Esta potente extensión habilita a desarrolladores, analistas GIS y DBAs expertos a realizar tareas de análisis espacial avanzado, integrando servicios basados en ubicación, visualización cartográfica e incluso IA geoespacial.

🧪 Funciones destacadas en Oracle 19c:

  • 📐 Almacenamiento y consulta 2D/3D
    Soporte para geometrías complejas (puntos, líneas, polígonos, modelos urbanos y gemelos digitales).

  • 🗺️ Visualización cartográfica avanzada
    Mapas interactivos, teselas vectoriales y uso del índice geoespacial jerárquico H3.

  • 🧭 Geocodificación y enrutamiento
    Obtención de coordenadas desde direcciones, cálculo de rutas óptimas y análisis de redes físicas y lógicas.

  • 🤖 Inteligencia Artificial Espacial
    Integración de aprendizaje automático sobre datos geoespaciales para patrones y predicciones.

  • 🧰 Oracle Spatial Studio
    Herramienta de autoservicio para generar mapas y análisis sin necesidad de escribir código.

🔗 Enlaces de referencia:


🧠 ¿Qué es shape_lib?

shape_lib es una librería externa (.so) que Oracle utiliza mediante el proceso extproc para ejecutar funciones espaciales avanzadas (por ejemplo: SDO_GEOM.SDO_AREA). Herramientas como ArcGIS o MapInfo dependen de ella.

Para funcionar, necesita una receta precisa en tres frascos clave:

  • extproc.ora → archivo de configuración para procesos externos

  • listener.ora y tnsnames.ora → rutas y servicios bien definidos

  • Declaración en la base → vía CREATE LIBRARY


🧨 El problema post-parcheo: ¡shape_lib desaparece!

Después de aplicar un parche (ya sea con Fleet o manualmente), en un entorno RAC sobre OCI, observamos:

  • Se sobrescribe extproc.ora, y se pierde:

      SET EXTPROC_DLLS=ANY
    
  • Las funciones espaciales en el esquema SDE dejan de funcionar.

  • DBA_LIBRARIES ya no muestra la referencia a shape_lib.


🔧 Tratamiento boticario paso a paso

✅ 1. Restaurar extproc.ora

Editá el archivo en todos los nodos RAC:

/u01/app/19.x.x.x/grid/hs/admin/extproc.ora

Asegurate de que contenga:

SET EXTPROC_DLLS=ANY

⚠️ Recuerda aplicarlo en todos los nodos: ej. nodobotica-bbaa1 y nodobotica-aabb2.

✅ 2. Validar y (re)crear la librería

Desde la PDB (ej: BOTICAD19) ejecutá:

ALTER SESSION SET CONTAINER = BOTICAD19;

SELECT library_name, file_spec
FROM dba_libraries
WHERE file_spec LIKE '%shape_lib%';

Si no aparece:

CREATE OR REPLACE LIBRARY shape_lib AS '/u01/app/oracle/shape_lib.so';
GRANT EXECUTE ON shape_lib TO SDE;

✅ 3. Reiniciar instancias para recargar extproc

Podés hacerlo manualmente o con Clusterware:

srvctl stop database -d botica19c_oci -f
srvctl start database -d botica19c_oci

🧪 Validaciones post-receta

Desde el usuario SDE o SYS:

SELECT SDO_GEOM.SDO_AREA(shape, 0.05)
FROM sde.<tu_tabla_espacial>
WHERE ROWNUM = 1;

Si ves errores como:

  • ORA-28575: unable to open RPC connection to external procedure agent

  • ORA-06520 o ORA-06522
    \=> Algo sigue fallando en extproc.ora, el listener o el path del .s.o.


📋 Checklist de la botica

ElementoValidación rápida
extproc.oraTiene SET EXTPROC_DLLS=ANY
Librería en DBA_LIBRARIESExiste en la PDB correspondiente
PermisosGRANT EXECUTE aplicado a SDE
Serviciossrvctl status service -d botica19c_oci
Funciones espacialesEjecutan correctamente (SDO_GEOM)

🧪 Bonus SQL para diagnóstico

-- ¿Dónde estoy?
SHOW CON_NAME;

-- Ver librerías externas activas
SELECT library_name, file_spec
FROM dba_libraries
WHERE file_spec IS NOT NULL;

-- Estado de instancias
SELECT instance_name, status FROM v$instance;

-- PDBs abiertas
SELECT name, open_mode FROM v$pdbs;

-- Validar función espacial
SELECT SDO_GEOM.SDO_AREA(shape, 0.05)
FROM sde.<tu_tabla_espacial>
WHERE ROWNUM = 1;

🧪 Conclusión boticaria

En la botica del DBA, una sola línea omitida puede apagar todo un sistema geoespacial. Pero con bisturí técnico, srvctl, y el diagnóstico adecuado, la geometría vuelve a respirar.

Si enfrentaste un caso similar, o si tienes tu propia fórmula secreta post-parcheo, te invitamos a compartirla con la comunidad.

💬 Escribeme en admin@laboticadeldba.com
🧴 Aquí recetamos soluciones, no excusas.

0
Subscribe to my newsletter

Read articles from Mauricio Muñoz Palma directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Mauricio Muñoz Palma
Mauricio Muñoz Palma

Bienvenidos a "La Botica del DBA" Donde la pasión por las bases de datos Oracle se transforma en conocimiento y excelencia. Este espacio está diseñado para ser el laboratorio de ideas, soluciones y estrategias que todo DBA necesita para optimizar, innovar y liderar en el mundo de las bases de datos. Desde los fundamentos hasta las últimas tendencias, aquí encontrarás guías prácticas, análisis profundos y herramientas que impulsarán tu carrera y tus proyectos al siguiente nivel.