Tablas de Blockchain en Oracle Database 21c

Hola a todos, hoy queríamos compartir con vosotros una nueva funcionalidad de Oracle Database 21c, las tablas de blockchain. Os contamos en que consiste.

¿Qué es la tecnología blockchain?

Es un sistema de registro de datos en bloques enlazados de forma segura y descentralizada. Cada bloque contiene información de transacciones que, una vez registrada, no puede ser alterada. Esto permite transferir valor o activos de manera transparente y sin intermediarios. La habréis oído porque ya se utiliza en criptomonedas, contratos inteligentes y más. Oracle ha implementado esta tecnologías en un objeto como las tablas, vamos a ver como lo ha hecho.

Las Blockchain Tables son una nueva opción de almacenamiento en Oracle 21c que garantiza la integridad de los datos a través de un enfoque similar al blockchain, pero sin la complejidad y sobrecarga de las cadenas de bloques tradicionales. Cada fila está vinculada criptográficamente a la anterior, lo que permite detectar cualquier alteración. Estas tablas son inmutables y solo permiten inserciones, lo que las hace ideales para aplicaciones que requieren un alto nivel de integridad y seguridad de los datos.

Características Principales

  1. Inmutabilidad: Las tablas de blockchain son a prueba de manipulaciones. Una vez que se inserta un dato, no puede ser modificado ni eliminado.
  2. Retención de Datos: Cada fila tiene un periodo de retención asociado, lo que garantiza que los datos permanezcan intactos durante un tiempo específico.
  3. Cadenas de Filas: Las filas están organizadas en cadenas, donde cada fila contiene un hash de sus datos y el hash de la fila anterior, asegurando la integridad de la cadena.

Casos de Uso de estas tablas en Oracle

  1. Auditorías: Permite mantener un registro inalterable de eventos para auditorías internas y externas.
  2. Finanzas: Se puede utilizar para asegurar la integridad de registros financieros y transacciones.
  3. Cumplimiento: Mantener registros confiables para cumplir con regulaciones gubernamentales.
tablas de blockchain gpsos

Creación de tablas de Blockchain

Para crear una tabla de blockchain, se utiliza el comando CREATE TABLE con la palabra clave BLOCKCHAIN y varias cláusulas específicas:

CREATE BLOCKCHAIN TABLE test1 (
id NUMBER,
campo1 VARCHAR2(20),
...
) NO DROP UNTIL 30 DAYS IDLE
NO DELETE UNTIL 16 DAYS AFTER INSERT;
  • NO DROP: Evita que la tabla sea eliminada hasta que no se hayan insertado nuevas filas durante un número específico de días.
  • NO DELETE: Protege las filas de ser eliminadas durante un periodo mínimo de 16 días después de su inserción.

Ejemplos de Operaciones de Eliminación y Actualización

Si intentas eliminar una fila antes de que haya pasado el periodo de retención, obtendrás un error:

DELETE FROM test1 WHERE id = 1;
ORA-05715: operation not allowed on blockchain table

Intento de Actualización. Las tablas de blockchain no permiten actualizaciones. Cualquier intento de actualizar una fila resultará en un error:

UPDATE test1 SET campo1 = 'valor1' WHERE id = 1;
ORA-05715: operation not allowed on blockchain table

Eliminación Después del Periodo de Retención. Una vez que el periodo de retención ha pasado, puedes eliminar las filas utilizando el procedimiento DELETE_EXPIRED_ROWS del paquete DBMS_BLOCKCHAIN_TABLE:

BEGIN
DBMS_BLOCKCHAIN_TABLE.DELETE_EXPIRED_ROWS('test1');
END;

Este procedimiento eliminará todas las filas que hayan superado el periodo de retención configurado.

Consideraciones sobre las tablas de Blockchain

  • Periodo de Retención: Es importante no establecer periodos de retención excesivamente largos durante las pruebas, ya que esto puede dificultar la eliminación de las tablas de prueba.
  • Algoritmos de Hash: Actualmente, se utiliza el algoritmo sha2_512 para el hashing de los datos, aunque se espera que en futuras versiones se permitan otros algoritmos.

¿Como se ven las tablas de blockchain si las consultamos en el diccionario?

select internal_column_id,
column_name,
data_type,
data_length,
hidden_column
from user_tab_cols
where table_name = 'TEST1'
order by internal_column_id;

INTERNAL_COLUMN_ID COLUMN_NAME DATA_TYPE DATA_LENGTH HIDDEN_COLUMN
------------------ ------------------------- --------------------------- ----------- -------------
1 ID NUMBER 22 NO
2 CAMPO1 VARCHAR2 20 NO
3 QUANTITY NUMBER 22 NO
4 CREATED_DATE DATE 7 NO
5 ORABCTAB_INST_ID$ NUMBER 22 YES
6 ORABCTAB_CHAIN_ID$ NUMBER 22 YES
7 ORABCTAB_SEQ_NUM$ NUMBER 22 YES
8 ORABCTAB_CREATION_TIME$ TIMESTAMP(6) WITH TIME ZONE 13 YES
9 ORABCTAB_USER_NUMBER$ NUMBER 22 YES
10 ORABCTAB_HASH$ RAW 2000 YES
11 ORABCTAB_SIGNATURE$ RAW 2000 YES
12 ORABCTAB_SIGNATURE_ALG$ NUMBER 22 YES
13 ORABCTAB_SIGNATURE_CERT$ RAW 16 YES
14 ORABCTAB_SPARE$ RAW 2000 YES

Como podemos ver, aparte de las dos columnas de la tabla aparecen una serie de campos nuevos que utiliza Oracle para el control del funcionamiento de la tabla.

Esta nueva funcionalidad ha salido para la versión 21 pero se puede utilizar a partir de la versión 19.10 pero requiere el parche 32431413 y que el parámetro COMPATIBLE  esté configurado a 19.10.0. Desde la versión 19.11 no se requiere instalar ningún parche adicional.

Esperamos que el artículo sea de vuestro interés y conocer un poco más esta nueva funcionalidad que nos puede ser muy útil en ciertas condiciones.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *