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

Administration Oracle Discussion :

Désactiver les archivelog pour une requête delete


Sujet :

Administration Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 48
    Points
    48
    Par défaut Désactiver les archivelog pour une requête delete
    Bonjour,

    J'ai une base oracle en 9iR2 qui est paramétrée en mode Archivelog.

    Je voudrais purger massivement les données d'une table (environ 17 millions de lignes).
    Par contre cela va générer des très gros fichiers d'archivelog et du coup lorsque RMAN va passer cela va plomber les temps de réponses de la base.

    Existe-t'il une option pour désactiver la création des archive logs juste pour une requête de delete ?

    Merci beaucoup de votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Points : 121
    Points
    121
    Par défaut
    Je voudrais purger massivement les données d'une table (environ 17 millions de lignes).
    C'est à dire toute la table? Tu fais une delete sans clause where?

    Si tel est le cas, ce n'est pas un delete que tu dois faire mais un truncate. Il n'y aura alors aucun archivelog, cela sera rapide MAIS tu ne pourras pas faire de rollback.
    Si en plus il n'y a pas de clef primaire sur cette table qui est référencée sur d'autres tables, alors je pense que c'est truncate ta solution.
    proracle.fr

  3. #3
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour

    Si l'effacement est massif sans toucher toutes les lignes il est recommandé de créer la table finale par un create table as select puis créer les index sur la nouvelle table, de faire des renommages pour que la nouvelle table prenne la place de l'ancienne le tout en gérant les diverses PK/FK ...

    A savoir, cette technique ne génère que très peu d'archivelog sauf si vous êtes en mode force logging (pour dataguard par exemple).

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Effectivement je veux bien faire un delete avec une clause where portant sur des dates et donc ne pas supprimer toutes les lignes.

    Je vais essayer ta solution ojo77.

    Merci

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Par contre petite question sur cette méthode, d'accord le create table as select ... va me créer ma nouvelle table sans générer beaucoup d'archivelog.
    Par contre il va falloir que je DROP ma table d'origine avant de pouvoir renommer la nouvelle table.
    Ce DROP va lui provoquer beaucoup d'archivelog ?

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Points : 121
    Points
    121
    Par défaut
    Le DROP ne génère pas d'archivelog, c'est une commande DDL. Elle est immédiate et sans retour arrière possible par rollback.

    Attention prévoir donc a un instant T la table n'existera plus le temps de renommer la nouvelle avec l'ancien nom (je dis ça si il y a une application connecté)

    Aussi à prévoir avant le DROP de récupérer les droits de l'ancienne table qui va être supprimée pour savoir quel droit il faut remettre.
    proracle.fr

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Si les archivelog posent un problème de volume, tu peux encore les désactiver le temps de ta purge. Dans l'ordre les étapes à réaliser :
    1. shutdown immediate
    2. startup mount
    3. alter database noarchivelog;
    4. alter database open;
    5. CREATE TABLE TAB_TMP as SELECT ... FROM <tab_à_purger>;
    6. DROP TABLE <tab_à_purger>;
    7. ALTER TABLE TAB_TMP rename to <tab_à_purger>;
    8. Tu remets tous les grants, synonymes et index éventuels
    9. Refaire les étapes 1. et 2.
    10. Tu remets le mode archivelog : alter database archivelog;
    11. alter database open;


    Bien évidemment, en production il va falloir te synchroniser avec ton DBA de prod le jour de la mise en production de ce traitement one shot.

    Bon courage

  8. #8
    Membre confirmé
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2007
    Messages : 419
    Points : 616
    Points
    616
    Par défaut
    bonsoir
    avec une sauvegarde avant la désactivation des archivelogs précédant l'opération et une après si ça s'est bien passé, c'est plus sûr

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/08/2012, 11h16
  2. Réponses: 8
    Dernier message: 20/03/2009, 14h54
  3. Réponses: 8
    Dernier message: 21/09/2007, 14h51
  4. [MySQL] Passer les résultats d'une requête dans un tableau 2D pour un webservice ?
    Par tintin72 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/06/2007, 01h36
  5. Réponses: 2
    Dernier message: 25/09/2006, 15h13

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