07/12/2025

Dans la version 19c, Oracle a introduit une fonctionnalité très intéressante, donnant à l'administrateur la possibilité de créer des tables où seules les opérations d'insertion sont autorisées, où la suppression de lignes est interdite ou peut être restreinte pour une durée déterminée, ainsi que de restreindre la suppression d'une table.

Il est important d'ajouter que pour bénéficier de cette fonctionnalité, il est nécessaire que la base de données soit dans la version 19.10, que le patch 32431413 soit appliqué et que le paramètre COMPATIBLE de la base de données soit défini sur la version 19.10.0 ou supérieure. À partir de la version 19.11, le correctif n'est plus nécessaire si le paramètre COMPATIBLE est modifié.

Si vous effectuez des tests sur cette nouvelle fonctionnalité, veillez à ne pas définir une période de rétention très longue, car il ne sera pas possible de supprimer les tests que vous effectuez avant la fin de la période définie.

Il existe un certain nombre de clauses qui peuvent être ajoutées à la commande et qui déterminent l'état final de nos tables de blockchain.

Clauses CREATE BLOCKCHAIN TABLE :

* NO DROP détermine la durée pendant laquelle notre table est protégée contre l'instruction de suppression "drop".

NO DROP [ UNTIL number DAYS IDLE ]

*NO DROP La table ne peut pas être supprimée.
*NO DROP UNTIL number DAYS IDLE La table ne peut pas être supprimée tant que de nouvelles lignes n'ont pas été insérées pendant le nombre de jours spécifié.ificats.

* NO DELETE détermine la période pendant laquelle les lignes ne peuvent pas être supprimées.

NO DELETE { [ LOCKED ] | (UNTIL number DAYS AFTER INSERT [ LOCKED ]) }

*NO DELETE  O EFFACER VERROUILLÉ : les lignes ne peuvent pas être supprimées.
*NO DELETE UNTIL number DAYS AFTER INSERTLes lignes ne peuvent pas être supprimées avant le nombre X de jours au cours desquels les lignes ont été insérées. Il est possible de modifier le délai de conservation à l'aide de la commande ALTER TABLE.
*NO DELETE UNTIL x DAYS AFTER INSERT LOCKED : Les lignes ne peuvent pas être supprimées avant le nombre X de jours au cours desquels les lignes ont été insérées, et il n'est pas possible de modifier la rétention à l'aide de la commande ALTER TABLE. Le nombre minimum de jours est de 16, sinon vous recevrez une erreur lors de l'exécution de la commande.

*HASHING USING sha2_512 VERSION v1

Clause relative au format de l'algorithme de hachage.

Exemple :
Nous créons un tableau de test conformément aux spécifications expliquées ci-dessus :


Dans notre cas, nous avons créé la table "oracleconraul", nous l'avons laissée de manière à ce qu'elle puisse être supprimée car il s'agit d'un environnement de test et nous avons indiqué que 16 jours doivent s'écouler avant que nous puissions supprimer des données de la table, la valeur minimale possible.

Nous insérons des valeurs de test.


Nous vérifions que les enregistrements ont été insérés correctement :


Lorsque nous essayons de supprimer des données, nous recevons un message indiquant qu'il n'est pas possible de supprimer des données dans notre tableau.



ALTER sur une table BLOCKCHAIN

Dans notre exemple, nous pourrions exécuter la commandedrop sur la table que nous avons créée, comme nous le verrons ci-dessous, car la table a été créée avec la clause "NO DROP UNTIL 0 DAYS IDLE", ce qui, pour un environnement de test, serait le plus logique.

Exécution de la commande sur notre table avec les valeurs actuelles :


Dans notre cas, pour éviter de supprimer la table, nous exécutons la commande suivante :


Nous effectuons les contrôles pour vérifier que tout fonctionne comme prévu. Nous allons essayer de supprimer des enregistrements, ce qui ne devrait pas être autorisé, nous allons insérer de nouvelles données dans la table, ce qui ne devrait pas poser de problème, et nous allons essayer, en guise de contrôle final, de supprimer la table, ce qui, après la modification, ne devrait pas être possible.

Exécutions :

insert into raul.oracleconraul values(200, 'RAUL') ;
1 row created.
commit ;


SQL> delete raul.oracleconraul where test_id=200 ;
delete raul.oracleconraul where test_id=200
*
ERROR at line 1 :
ORA-05715 : operation not allowed on the blockchain or immutable table

SQL> drop table raul.oracleconraul ;
drop table raul.oracleconraul
*
ERROR at line 1 :
ORA-05723 : drop blockchain or immutable table ORACLECONRAUL not allowed

Pour vérifier que tout est correct, nous pouvons lancer la requête suivante :
Dans cette requête, nous pouvons identifier les tables que nous avons créées en tant que tables "blockchain" et leurs caractéristiques.


En bref, Oracle offre à partir de la version 19.10 une nouvelle fonctionnalité qui permet la mise en œuvre d'applications blockchain, ou permet à l'administrateur de disposer d'un outil de sécurité supplémentaire pour éviter les problèmes de suppression ou de distorsion des audits sur l'une des tables "cores" qui ne peuvent pas être modifiées dans la base de données. Il est très important, avant d'appliquer cette fonctionnalité, de réfléchir à son application correcte, car, comme indiqué, il est possible que la table qui a été initialement conçue pour ne pas être supprimée/modifiée, en raison de l'évolution de l'application, des ressources, etc.

YouTube
LinkedIn