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

Oracle Discussion :

Suppression de masse


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Par défaut Suppression de masse
    Bonjour à tous,

    Je reprends une vieille discussion de l'année dernière, mais toujours d'actualité.

    Je souhaiterai faire une suppression de masse > 1'000'000.

    Plusieurs choix se proposent :
    1. Découper en multiples requêtes "delete" (lourd)
    2. Faire un Create AS + truncate après avoir fait une copie des données à conserver (lourd)
    3. Faire une partition et dropper cette partition (la question est : peut-on faire une partition à une table qui n'est pas déjà partitionnée ?)
    4. Désactiver l'utilisation des rollbacks segments
    5. autre chose ?

    En fait je suis sur la 3ème mais je ne sais pas comment partitionner ma table, avez-vous une idée ?

    A savoir que c'est un traitement batch Java et que je peux attaquer n'importe quelle table de mon schéma de base de données.

    Merci de votre collaboration.

    Boutss

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    1. Pourquoi pas...
    2. quelle est la proportion à garder / à jeter ?
    3. Non, pas possible, sauf à manipuler toutes les données pour les partitionner puis ensuite truncater la partition. Pas mieux que le 2 donc si la table n'est pas pré-partitionnée.
    4. Non, pas possible.
    5. Non pas de solution miracle

    Concernant le filtrage, se fera-t-il sur des colonnes indexées ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Par défaut
    Merci de tes réponses.

    Oui cela sera sur une colonne indexée car c'est la clé primaire.
    En fait les ID de la table sont stockées dans une table temporaire et je fais la liaison pour effectuer le delete.

    Oui car il y a 2 choses couteuses dans la suppression, les rollbacks segments et le recalcul des indexs, c'est bien ça ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Si la table est utilisée par un seul traitement, vous pouvez essayer de recréer la table avec un CREATE TABLE ... AS SELECT (CTAS) qui va sélectionner les données à garder. Ceci peut être d'autant plus rapide que vous gardez peu de lignes dans la table. L'inconvénient c'est qu'il faut ensuite recréer les contraintes sur la table, recréer les index, redonner les privilèges liés à la table et renommer la table ...

  5. #5
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par pifor Voir le message
    Si la table est utilisée par un seul traitement, vous pouvez essayer de recréer la table avec un CREATE TABLE ... AS SELECT (CTAS) qui va sélectionner les données à garder. Ceci peut être d'autant plus rapide que vous gardez peu de lignes dans la table. L'inconvénient c'est qu'il faut ensuite recréer les contraintes sur la table, recréer les index, redonner les privilèges liés à la table et renommer la table ...
    pas forcément :
    1. CTAS A --> B
    2. TRUNCATE
    3. INSERT SELECT B --> A
    mais ça peut prendre beaucoup de temps là aussi, donc ça dépend du ratio je pense...

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Citation Envoyé par LeoAnderson Voir le message
    pas forcément :
    1. CTAS A --> B
    2. TRUNCATE
    3. INSERT SELECT B --> A
    mais ça peut prendre beaucoup de temps là aussi, donc ça dépend du ratio je pense...
    Dans mon scénario, il n'y a pas besoin des étapes 2 et 3 mais il faut supprimer A et renommer B en A avec RENAME (et recréer les contraintes, index, grants).

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Par défaut
    Oui ça sera le seul traitement.
    C'est une bonne solution mais risquée à mon goût, car je dois être sûr que je redonne exactement les mêmes caractéristiques à la table.

    Si en java (via les Métadata) je peux avoir une liste exhaustive et tout recréer, si les privilèges m'en permettent, alors ok.

    @LeoAnderson:
    Oui avec le
    "create select as" + "truncate" + "insert" ça peut être long :
    Ex : table de 15M et 3M à supprimer

Discussions similaires

  1. [11gR2] Suppression en masse
    Par LEK dans le forum SQL
    Réponses: 4
    Dernier message: 28/11/2013, 11h34
  2. Suppression de masse sans curseur
    Par calagan99 dans le forum Développement
    Réponses: 2
    Dernier message: 14/06/2011, 11h59
  3. Suppression en masse
    Par petitfrere dans le forum Administration
    Réponses: 7
    Dernier message: 08/09/2009, 10h44
  4. Suppression de masse
    Par Macfurp dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/10/2008, 15h16

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