Implémentation d'une stratégie de maintenance des données
En implémentant une stratégie de maintenance des données efficace lorsqu'un site est publié, vous pouvez éviter des problèmes de base de données tels qu'une dégradation des performances, un dépassement de l'espace de stockage disponible, des temps de sauvegarde et de restauration accrus.
La création d'une stratégie efficace de gestion des données implique les tâches suivantes :
1. Identifier les données à préserver
Surveillez la taille des tables de base de données et leur taux de croissance et collectez les statistiques de croissance de la base de données de production sur une base hebdomadaire ou mensuelle. Il est recommandé de collecter ces informations pendant les fins de semaine afin d'éviter les interruptions du travail accompli pendant la semaine. La méthode que vous utilisez pour suivre la croissance de la base de données dans le temps dépend de votre type de base de données.
Option
Description
utilitaire de dbgrowth
Définissez la table de base de données dbgrowth :
CREATE TABLE dbgrowth (
rundate DATE DEFAULT CURRENT DATE NOT NULL,
tabschema VARCHAR(128) NOT NULL,
tabname VARCHAR(128) NOT NULL,
card BIGINT DEFAULT 0 NOT NULL
) IN USERSPACE1 INDEX IN USERSPACE1;
ALTER TABLE dbgrowth ADD PRIMARY KEY (rundate,tabschema,tabname);
Créez un travail cron pour remplir la table dbgrowth tous les dimanches. Créez un script appelé dbgrowth.sql contenant les éléments suivants :
SELECT 'WARNING: The last statistics for table ' || rtrim(tabschema) || '.' || tabname || ' ' || ' were taken on '
|| char(date(stats_time)) || '. The dbgrowth script requires the stats be up to date.' warning FROM syscat.tables where date(stats_time) < current date;
-- in case it is run twice
DELETE FROM dbgrowth WHERE rundate = CURRENT DATE;
-- insert
INSERT INTO dbgrowth ( tabschema, tabname, card ) SELECT tabschema, tabname, card FROM syscat.tables WHERE card >= 0;
Utilisez l'instruction SQL suivante pour répertorier les tables dont la croissance est la plus rapide :
SELECT CAST( RTRIM(a.tabschema) || '.' || a.tabname AS VARCHAR(40)) tabname, b.card begincard, a.card endcard, DAYS(a.rundate)
- DAYS(b.rundate) numdays, a.card - b.card growth, (a.card-b.card)/(DAYS(a.rundate)-DAYS(b.rundate)) dailyavg
FROM dbgrowth a,
dbgrowth b
WHERE a.tabschema = b.tabschema
AND b.tabname = a.tabname
AND a.tabschema IN ( 'DB2INST1' )
AND a.rundate = ( SELECT MAX(rundate) FROM dbgrowth )
AND b.rundate = ( SELECT MAX(rundate) FROM dbgrowth WHERE rundate < (SELECT MAX(rundate) FROM dbgrowth ))
AND a.card - b.card > 1000
ORDER BY a.card - b.card DESC
FETCH FIRST 50 ROWS ONLY WITH UR;
To compare with the previous one use:
AND b.rundate = ( SELECT MAX(rundate) FROM dbgrowth WHERE rundate < (SELECT MAX(rundate) FROM dbgrowth ))
To compare with a specific date use:
AND b.rundate = ( SELECT MAX(rundate) - 7 DAYS FROM dbgrowth )
L'utilitaire dbgrowth sauvegarde le nombre de lignes en cours pour chaque table de base de données se trouvant sur la colonne de carte de la table syscat.tables. Ce nombre est correct uniquement si les statistiques de cette table de base de données sont actualisées.
utilitaire de dbgrowth
Définissez la table de base de données dbgrowth :
CREATE TABLE dbgrowth (
rundate DATE NOT NULL,
tabschema VARCHAR2 (30) NOT NULL,
tabname VARCHAR2 (50) NOT NULL,
card NUMBER DEFAULT 0 NOT NULL
);
ALTER TABLE dbgrowth ADD PRIMARY KEY (rundate,tabschema,tabname);
Créez un travail cron pour remplir la table dbgrowth tous les dimanches. Créez un script appelé dbgrowth.sql contenant les éléments suivants :
SELECT 'WARNING: The last statistics for schema ' || rtrim(owner) || ' were taken on ' || to_char(LAST_ANALYZED,'dd-mon-yyyy')
|| '. The dbgrowth script requires the stats be up to date.' warning
FROM dba_tables where round(LAST_ANALYZED) < round(sysdate) and owner = 'WCS' and rownum < 2;
-- in case it is run twice
DELETE FROM dbgrowth WHERE rundate = round(sysdate);
-- insert
INSERT INTO dbgrowth ( rundate, tabschema, tabname, card ) SELECT round(sysdate), owner, table_name, nvl(num_rows,0)
FROM dba_tables WHERE OWNER = 'WCS';
où WCS est le nom de schéma du référentiel HCL Commerce.
Utilisez l'instruction SQL suivante pour répertorier les tables dont la croissance est la plus rapide :
SELECT RTRIM(a.tabschema) || '.' || a.tabname tabname, b.card begincard, a.card endcard, a.rundate
- b.rundate numdays, a.card - b.card growth, (a.card-b.card)/(a.rundate-b.rundate) dailyavg
FROM dbgrowth a,
dbgrowth b
WHERE a.tabschema = b.tabschema
AND b.tabname = a.tabname
AND a.tabschema IN ( 'WCS' )
AND a.rundate = ( SELECT MAX(rundate) FROM dbgrowth )
AND b.rundate = ( SELECT MAX(rundate) FROM dbgrowth WHERE rundate < (SELECT MAX(rundate) FROM dbgrowth ))
AND a.card - b.card > 1000
AND ROWNUM < 50
ORDER BY a.card - b.card DESC;
To compare with the previous one use:
AND b.rundate = ( SELECT MAX(rundate) FROM dbgrowth WHERE rundate < (SELECT MAX(rundate) FROM dbgrowth ))
To compare with a specific date use:
AND b.rundate = ( SELECT MAX(rundate) - 7 DAYS FROM dbgrowth )
L'utilitaire dbgrowth sauvegarde le nombre de lignes en cours pour chaque table de base de données se trouvant sur la colonne de carte de la table dba_tables. Ce nombre est correct uniquement si les statistiques de cette table de base de données sont actualisées.
Oracle Flashback Technology
Oracle Flashback Technology est un groupe de fonctions de base de données Oracle que vous pouvez utiliser pour afficher les états précédents des objets de base de données. Vous pouvez également restaurer des objets de base de données à un état antérieur sans utiliser la récupération de support à un instant T.
Utilisez Oracle Flashback Technology pour tracer les données de table d'historique. Pour plus d'informations sur l'utilisation d'Oracle Flashback Technology, voir Oracle Documentation. Recherchez Oracle Flashback Technology.
tips :
A l'aide des statistiques de croissance, identifiez les données que vous pouvez supprimer des tables à croissance rapide ou déplacer dans une autre base de données. Les tables de base de données suivantes sont généralement celles dont la croissance est la plus rapide :
ORDERS, qui comprend des commandes terminées, en attente et annulées
MEMBER, qui comprend des utilisateurs invités et enregistrés
ADRESSE, qui comprend des adresses permanentes et temporaires
Si vous supprimez fréquemment des dossiers dans un environnement de production, exécutez dbclean régulièrement sur la table FOLDER.
Examinez la liste des scénarios de suppression par défaut des combinaisons particulières d'objet et de type pour déterminer les tables de base de données et les lignes à supprimer pour un objet et un type d'objet particuliers. Pour plus d'informations, voir Objets de l'utilitaire de nettoyage de la base de données.
2. Définir des stratégies
Une définition de stratégie décrit la durée de conservation des informations dans la base de données avant leur déplacement vers un système d'aide à la décision ou leur effacement. Les stratégies qui reflètent vos pratiques commerciales en cours aident à préserver une base de données cohérente. Par exemple, les politiques échantillons qui suivent définissent combien de temps conserver les informations de commande et d'utilisateur invité :
Durée de conservation des commandes terminées dans la base de données.
Nombre de jours avant la suppression du compte d'un invité n'ayant passé aucune commande.
Durée de conservation des commandes en attente pour les invités et les utilisateurs enregistrés.
3. Appliquer les stratégies à l'aide du scriptage
L'utilitaire de nettoyage de base de données HCL Commerce est destiné à vous aider à nettoyer la base de données. Cet utilitaire contient une liste prédéfinie d'instructions de suppression permettant d'effacer les objets HCL Commerce courants, tels que les utilisateurs, les commandes et les données de catalogue. Personnalisez les instructions par défaut disponibles pour être utilisées avec le script pour les adapter à vos besoins. Ce script personnalisé supprime les enregistrements marqués pour suppression ainsi que les informations définies comme périmées dans les stratégies de maintenance de la base de données. Pour plus d'informations, voir Utilitaire de nettoyage de la base de données.
Test
Utilisez les tests fonctionnels et non fonctionnels pour vérifier votre stratégie de maintenance des données.
Le tableau suivant répertorie et décrit les options de test.
Type de test
Description
Fonctionnel
Utilisez le test fonctionnel pour vérifier que les suppressions effectuées par dbclean sont correctes :
Une fois le test terminé, vérifiez attentivement les suppressions en cascade sur les relations de clé externe car la suppression d'une ligne dans une table de base de données peut avoir une incidence sur les enregistrements d'autres tables. Par exemple, la suppression d'une ligne dans la table de base de données OFFER peut affecter les enregistrements connexes dans la table de base de données ORDERITEMS.
Après avoir exécuté le script de l'utilitaire dbclean, demandez aux utilisateurs professionnels de valider l'état de la base de données pour s'assurer qu'aucune donnée n'a été supprimée par erreur.
Non fonctionnel
Utilisez le test non fonctionnel pour déterminer les ressources système requises pour prendre en charge l'utilitaire dbclean. Pour effectuer ce type de test, vous devez disposer d'un environnement de performances et pouvoir simuler une charge.
L'exécution de l'utilitaire dbclean peut ajouter les types de contrainte suivants au système :
Utilisation de l'unité centrale supérieure à la normale sur le serveur de base de données.
Réduction du temps de réponse global du site.
Un conflit de verrous, par exemple un interblocage, une expiration du délai ou une attente de verrou.