Retrait de la suppression de la cascade dans l'environnement de production pour empêcher la perte de données
Lorsque les dossiers sont supprimés dans l'environnement de transfert pour une table de base de données qui contient une relation de clé externe cascade-delete avec une autre table, et que vous propagez les changements dans l'environnement de production, une perte de données peut se produire. Pour éviter toute perte de données, envisagez de remplacer la relation de clé externe entre les tables par une relation delete-restrict ou delete-no-action.
Pourquoi et quand exécuter cette tâche
Lorsque vous choisissez de supprimer un enregistrement, la plupart des enregistrements de base de données sont marqués pour suppression et ne sont pas immédiatement supprimés. Quand un enregistrement est marqué pour suppression, aucune opération de suppression en cascade ne s'exécute sur les tables de base de données qui ont une relation de clé externe avec la table qui inclut l'enregistrement marqué pour suppression. Si vous désactivez la marque pour l'opération de suppression lors d'un processus de chargement, la suppression effective d'un enregistrement et la suppression en cascade ultérieure d'autres enregistrements se produisent.
Quand un enregistrement dans une table qui contient une relation de clé externe cascade-delete, telle que la table OFFER, est supprimé dans l'environnement de transfert et la suppression se propage à l'environnement de production, une opération cascade-delete peut se produire sur les enregistrements dans la table ORDERITEMS. Etant donné qu'il n'y a pas de données transactionnelles ORDERS dans l'environnement de transfert, la suppression des données OFFER dans l'environnement de transfert n'a pas d'effet de cascade dans cet environnement. Dans l'environnement de production, toutefois, la suppression de cascade peut se produire. Si une opération cascade-delete se produit dans l'environnement de production, tout enregistrement ORDERITEMS qui est associé à l'enregistrement supprimé dans la table OFFER est également supprimé. Lorsque la suppression de cascade se produit, la perte de données peut se produire alors qu'il manque des commandes dans les enregistrements de la table ORDERITEMS.
Procédure
-
Convertissez la relation de clé externe
cascade-deleteentre les tables OFFER et ORDERITEMS dans une relation delete-restrict oudelete-no-action. La nouvelle relation garantit que l'enregistrement d'offre n'est pas supprimé de l'environnement de production une fois que les suppressions de l'environnement de transfert sont propagées.L'utilitaire stagingprop est amélioré pour fournir des codes d'exit lors d'une violation
delete-restrictoudelete-no-actiondans l'environnement de production. Si vous essayez de propager les suppressions pour les tables avec ces restrictions, des erreurs peuvent se produire.Exécutez les commandes suivantes pour supprimer la relation de clé externe cascade-delete et créer une relation cascade-restrict :
ALTER TABLE orderitems DROP CONSTRAINT f_506; ALTER TABLE orderitems ADD CONSTRAINT f_506 FOREIGN KEY (offer_id) REFERENCES offer (offer_id) ON DELETE RESTRICT;
ALTER TABLE orderitems DROP CONSTRAINT f_506; ALTER TABLE orderitems ADD ( CONSTRAINT f_506 FOREIGN KEY (offer_id) REFERENCES offer ); Note: The "ON DELETE CASCADE" part has been removed.
Remarque : Vous pouvez rencontrer un problème de performances lorsque vous supprimer et créer une relation de clé externe dans des tables qui contiennent de grandes quantités de données. Le problème de performance survient car la relation de clé externe doit être supprimée et créée ligne par ligne. -
Utilisez la commande mark-for-delete pour supprimer les enregistrements de tables pour les tables avec des relations de clés externes
cascade-deletevers des tables dont les données doivent être conservées.Lorsque vous utilisez l'utilitaire de nettoyage de la base de données dans l'environnement de transfert pour supprimer les enregistrements marqués pour suppression, une perte de données peut se produire lorsque vous propagez les modifications vers l'environnement de production. Pour plus d'informations sur l'exécution de l'utilitaire de nettoyage de la base de données lorsque votre site utilise un environnement de transfert, voir Exécution de l'utilitaire de nettoyage de la base de données dans un environnement de transfert.
Pour plus d'informations sur l'instruction SQL pour l'exécution de l'utilitaire de nettoyage de base de données pour les objets WebSphere Commerce, voir Objets de l'utilitaire de nettoyage de la base de données.
Remarque : Evitez d'exécuter les commandes de suppression, autres que de marquage pour suppression, dans les tables qui contiennent les relations de clés externescascade-deleteavec des tables qui contiennent des données qui doivent être conservées. Si vous devez exécuter les opérations de suppression sur une table, révisez les relations de clés externes de la table pour identifier les tables concernées par les opérations. Pour plus d'informations sur les tables de base de données HCL Commerce, voir HCL Commerce schéma de base de données.