IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Extraction puis suppression de données


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut Extraction puis suppression de données
    Bonjour,

    Je dois faire un mécanisme pour purger des données d'une table. Il faut extraire les données dans un fichier puis les supprimer
    Comme la table contient plusieurs Varchar2(4000) je vais passer par un PL/SQL et UTL_FILE.

    Etant donné qu'en fonction de certaines valeurs, il faut mettre la ligne dans des fichiers différents, je vais lire la table; concaténer les colonnes et insérer la ligne dans le bon fichier. Puis faire un delete de la ligne.

    Je voudrais avoir vos avis et expériences.
    Et je voudrais surtout savoir ce qu'il se passe en cas de plantage ? N'y a-t-il pas un risque de perdre des données ?

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je ferai un traitement qui écrit les donnés dans les fichiers d’extraction et ensuite, supprime ce qui est à supprimer dans la table à purger via une seul delete.

    Pour répondre à votre question : tant que le commit n’est pas fait après la suppression de chaque ligne, il n’y pas de risque de "perte des données" en cas de plantage. Par contre l’écriture dans un fichier n’est pas transactionnelle: si après avoir écrit dans le fichier il y a un problème vous ne pouvez pas supprimer ce que vous avez déjà écrit dans le fichier.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Oui mais la table étant très grosse, je voudrais éviter de devoir la lire 2 fois.
    D'où mon idée de supprimer au fur et à mesure chaque ligne supprimée. Et comme il ne faut pas que les données soient perdues en cas de plantage, c'est pour cela que je me demandais si UTL_FILE écrit vraiment physiquement la données lors de l'écriture.

    En outre je ne sais pas si un seul DELETE pourrait passer car il se peut qu'il y ait énormément de données à supprimer

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Delete ligne à ligne signifie lire la table bien plus que deux fois ; la lecture se fait par bloc de données et non pas par enregistrement.

    « Gros, petit » ça ne signifie rien. Un chat est petit par rapport à une singe mais gros pour un souri. Si une transaction a besoin de beaucoup de ressource en termes d’espace de rollback/undo il faut lui en donner.

    Parfois, au lieu de supprimer les lignes, un autre table de travail est créées, qui contient seulement les lignes à préserver, ensuite la table d'origine est « droppé » et récréée à partir de la table de travail en faisant attention aux indexes, triggers, droits, etc.

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    OK
    La table fait plus de 9 millions de lignes

    Donc la meilleure solution serait d'extraire tout dans un premier temps puis de supprimer, c'est bien ca ?

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Si suite à la purge il reste peu de lignes (disons 1 million; ça je la sorte du chapeau donc tester ce qui convient sera mieux que de prendre cette valeur pour argent comptant) oui.

Discussions similaires

  1. Problème d'espace disponible après suppression de données
    Par carjo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2006, 15h48
  2. Suppression de données
    Par ledaker dans le forum Access
    Réponses: 3
    Dernier message: 10/03/2006, 17h10
  3. Réponses: 1
    Dernier message: 04/03/2006, 09h23
  4. [C#] Limites de C# quand a la suppression de données
    Par Anonymous dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/01/2005, 23h18
  5. Suppression de données
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/12/2004, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo