Le référentiel de données de la Suite SOA peut grossir rapidement en terme de volume.
Oracle met à disposition pour cela des scripts de purge, permettant de maitriser cette volumétrie, et de conserver de bonnes performances.
Cette purge va se faire par un drop des partitions des tables du référentiel, après un controle de l’utilisation ou non des données dans les partitions « anciennes ».
Le schéma de données du référentiel est généralement partitionné par Interval ou par range. Interval est conseillé pour des facilités d’administration des partitions (création automatique).
Une bonne pratique est de partitionner le schéma sur une durée optimum pour la rétention de données : Par exemple, un partitionnement au mois si vous conservez plusieurs mois ou plus de données, mais pour conserver 3 semaines de données, un partitionnement à la journée est obligatoire pour la purge.
Nous allons voir comment procéder ci dessous, cas pratique pour la suite SOA 12c.
Localisation des scripts
Les scripts sont localisés dans le répertoire :
${SOA_ORACLE_HOME}/rcu/integration/soainfra/sql/verify : script de vérification et purge
2 scripts existent :
- soa_exec_interval_verify.sql : tables partitionnées par INTERVAL
- soa_exec_verify.sql : tables parittionnées par RANGE
et certains scripts sont intégrés dans les packages PL/SQL du référentiel de données.
Un DIRECTORY doit être défini dans la base pour que les procédures PL/SQL puissent générer les fichiers :
sqlplus soainfra/XXX SQL> CREATE OR REPLACE DIRECTORY PART_DIR AS '/tmp/verify';
Modifier la durée d’Interval du partitionnement
Admettons que par défaut, les partitions soient sur un INTERVAL d’un mois, mais qu’elles devraient être partitionnées par jour pour faciliter la purge et une meilleure exploitation.
Nous allons lancer la commande : exec verify_soa.alter_interval(‘NUMTODSINTERVAL(1, »DAY »)’);
Qui générera un fichier avec l’ensemble des ordres ALTER TABLES correspondant au schéma de données du référentiel SOA (chaque table partitionnées avec des Interval) :
ALTER TABLE DLV_MESSAGE set INTERVAL(NUMTODSINTERVAL(1, ‘DAY’))
Il suffira d’exécuter ce fichier SQL pour mise à niveau du schéma :
sqlplus soainfra/XXX SQL> @ SOA_ALTER_INTERVAL_GROUP.SQL
Les prochaines partitions sur une journée seront créées les jours suivant.
Cette opération est à réaliser avant de lancer les scripts de purge, pour que seules des partitions journalières soient conservées après la purge.
Lancement des scripts de vérification et purge
Cas où les tables ont un partitionnement par Interval.
Le script de purge fourni par Oracle est : soa_exec_interval_verify.sql
Il faut modifier la date avant laquelle les données doivent être purgées, ou la remplacer par une variable (SYSDATE -15 par ex) :
soa_max_timestamp := to_timestamp(‘2018-06-01′,’YYYY-MM-DD’);
Lancer le script, pour qu’il génère des fichiers de rapport : 1 par partition à purger de la table SCA_FLOW_INSTANCE (répertoire /tmp/verify)
Et 1 script de purge est généré par partition.
Le script se lance avec un argument ayant la valeur 1 ou 2, car il y a deux groupes de tables distinctes à purger.
L’Automatisation se fera par un grep des fichiers trace pour vérifier l’absence d’erreur.
Lancement ensuite des fichier SQL générés.
Pour la problématique de FK sur le schéma, Oracle fournit également une procédure qui génère des scripts de disable/enable des FK : exec verify_soa.alter_fk
=> Génération de 2 scripts SOA_DISABLE_FK.SQL et SOA_ENABLE_FK.SQL
Liste des commandes à passer :
# mise à jour date de purge dans le fichier soa_exec_interval_verify.sql ou passage par argument
Sqlplus soainfra/XXX SQL> exec verify_soa.trunc_verify1_temp_tables; SQL> @soa_exec_interval_verify.sql 1 SQL> @soa_exec_interval_verify.sql 2 SQL> exec verify_soa.alter_fk
Génère les fichiers pour analyse des traces (Continue ou arrête le traitement de purge) et les fichiers SQL de drop des partitions.
Ces fichiers ont le format : SOA_SYS_P14442_LOG_1 pour les traces, et SOA_SYS_ P14442_RESULT_1.sql pour le fichier SQL associé.
Par Shell ou autre langage de scripting, effectuez un grep sur les fichiers traces; si Erreur : stop du traitement, sinon lancement des scripts SQL générés.
Pour du RANGE partitionning, le format des fichiers est différent :
Fichier trace de format : SOA_PARTSYS1_LOG_2 (2 pour le groupe 2 de tables), indique s’il y a des erreurs ou non.
Fichiers de purge de format : SOA_PARTSYS1_RESULT_2.sql, qui contient les Drop des partitions.
Une fois les traces analysées, le fichier de commandes à générer sera de la forme :
cat CMD_PURGE.sql
spool CMD_purge @ SOA_DISABLE_FK.SQL @ fichiers SQL de purge groupe 1 @ fichiers SQL de purge groupe 2 @ SOA_ENABLE_FK.SQL
A exécuter sur votre base pour la purge.