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 :

a quoi sert le paramètre UNDO_RETENTION


Sujet :

Administration Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut a quoi sert le paramètre UNDO_RETENTION
    Bonjour,

    j'aurais souhaité savoir à quoi sert le paramètre UNDO_RETENTION?
    Je travaille sur base en 9.2.0.8 et j'ai un problème de taille de RollBackSegment.

    On m'a conseillé d'augmenter la valeur de ce paramètre à la place d'augmenter la taille du tablespace UNDO. Est-ce judicieux?si oui Pourquoi.
    merci pour vos réponses

  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
    Points : 3 199
    Points
    3 199
    Par défaut
    en 9, si vous avez l'erreur snapshot too old, ça ne changera rien
    faut juste aggrandir ou réduire les transactions

    en 10, tout dépend de la garantie
    http://download-uk.oracle.com/docs/c...o.htm#ADMIN013

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est quoi le problème exactement ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    en fait j'ai une procédure qui permet de faire redescendre la HWM de mes tables.
    donc je créer une table temporaire en faisant un select * de la table que je veux truncater. ensuite je truncate ma table et je réinsère les données à partir de ma table temporaire.
    voici un extrait de mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    -- Boucle sur toutes les tables LDR
      	FOR CUR_REC in (select * from USER_TABLES where table_name like 'LDR_%')
      	LOOP
    	  	BEGIN
     
    			vA_nom_table_tmp := 'A_' || CUR_REC.table_name;
     
    			-- création de la table temporaire contenant les même données que la table LDR
    	  		vA_sql := 'create table ' || vA_nom_table_tmp || ' as select * from ' || CUR_REC.table_name;	
    	  		EXECUTE IMMEDIATE vA_sql;
     
    	  		-- truncate de la table LDR
    	  		vA_sql := 'truncate table ' || CUR_REC.table_name;	
    	  		EXECUTE IMMEDIATE vA_sql;
     
    	  		-- insertion des données dans la table LDR avec la table tmp
    	  		vA_sql := 'insert into ' || CUR_REC.table_name || ' select * from ' || vA_nom_table_tmp;	
    	  		EXECUTE IMMEDIATE vA_sql;
     
    	  		COMMIT;
     
    	  		-- ANALYZE de la table LDR
    	  		vA_sql := 'analyze table ' || CUR_REC.table_name || ' compute statistics';	
    	  		EXECUTE IMMEDIATE vA_sql;
     
    	  		-- DROP de la table temporaire
    	  		vA_sql := 'drop table ' || vA_nom_table_tmp;	
    	  		EXECUTE IMMEDIATE vA_sql;
     
     
    	  	EXCEPTION
    		  WHEN OTHERS THEN
    		  	   vA_msg := SQLERRM;
     			   Pck_Log.PWrite_Error('Pck_util.PUTL_INIT_HWM','SQLCODE='||TO_CHAR(SQLCODE));
    			   Pck_Log.PWrite_Error('Pck_util.PUTL_INIT_HWM',SQLERRM);
    			   Pck_Log.PWrite_info;
    	  	END;
      	END LOOP;
    Pour les grosses tables j'ai un problème de rollbacksegment too small

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    finalement j'ai modifié le paramètre UNDO_RETENTION en le faisant passer de 5min à 30 minutes et je n'ai plus de problème. Mais je ne comprends toujours pas l'impact de ce paramètre

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    tu sais que tu peux faire un MOVE pour faire redescendre la HWM ? Sinon, le UNDO_RETENTION (à part en 10g avec la garantie) ne peut être la souce du problème... c'est la taille du UNDO qui est insuffisante ou plutôt sa sollicitation qui est trop intensive.

    Autre question : pourquoi vouloir absolument redescendre la HWM si les tables sont grosses ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    c'est quoi un move?
    ba en fait ma base sert de DataWarehouse: je charge mes tables de dimensions et ma table de fait à partir de la base transactionnelle. A chaque chargement de mon DW c'est comme si je chargeais tout le contenu de ma base transactionnelle. Chaque chargement correpond à un identifiant de traitement dans mes tables. De temps en temps je suis amené à supprimer des chargements donc des milliers de lignes dans chaque table de dimensions. Pour certaines requêtes effectuées sur ces tables l'optimiseur oracle préfère faire un Full Scan. Il me paraissait donc utile de faire redescendre la HWM sinon le full scan irait jusqu'à la HWM. Non? est ce que je suis dans le faux? As-tu une meilleure solution?
    merci de ton aide

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    En effet... mais si tu ne fais pas de l'insertion en mode DIRECT (INSERT /*+ APPEND*/ par exemple) les vides seront comblés... est-ce que ce ne serait pas plus intéressant de stabiliser le plan d'exécution ? Le FTS est-il réellement plus intéressant ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    par FTS t'entends Full Scan?
    Je ne sais pas si c'est plus intéressant, c'est l'optimiseur qui choisit. j'essaye pour chaque requête de travailler avec le plan d'execution et donc de mettre des Index là où il faut mais malgré ces indexes oracle prefere le Full Scan.

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    J'ai oublié de répondre MOVE sert à déplacer la table, tu peux faire un MOVE dans le même tablespace.

    FTS = Full Table Scan. Créé des indexes systématiquement c'est pas forcément une super idée. Vérifie que les stats sont bien calculées, ça peut être la cause d'un mauvais plan d'exécution... sachant qu'un FTS n'est pas forcément synonyme de mauvais plan

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    oui je sais: je met l'index je calcul les stats et je regarde dans le plan d'execution si l'index est utilisé sinon je le supprime. c'est ce que je fais.

    Concernant le move ça marche en 9i? c koi la commande exact?

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut
    ok merci mais j'aimerais quand même bien savoir à quoi sert le paramètre UNDO_RETENTION

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    il définit la durée durant laquelle les données doivent être conservée dans le UNDO après la fin de la transaction qui les a mise. En revanche cette durée n'est pas garantie ce qui signifie que si Oracle a besoin de place il écrasement quand même les données retenues.

  15. #15
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Citation Envoyé par farenheiit Voir le message
    j'essaye pour chaque requête de travailler avec le plan d'execution et donc de mettre des Index là où il faut mais malgré ces indexes oracle prefere le Full Scan.
    Les index non utilisés sont sans doute peu sélectifs, d'ou un coût par index plus coûteux que si Oracle effectue un FTS.
    Ta base étant orientée DSS, elle manipule de plus gros volumes de data (en principe), donc les FTS sont plus fréquent qu'en transactionnel.
    Maintenant, si tu veux absolument qu'oracle utilise tes index, et ainsi vérifier si l'optimiseur à tort ou raison (à toi de comparer les plans d'exécution et les temps d'exec), tu peux soit placer des hints dans quelques requêtes, soit réduire drastiquement le paramètre optimizer_index_cost_adj (à 10 par exemple).

Discussions similaires

  1. [RCP] Nouveau paramètre dans le .product : à quoi sert-il ?
    Par Laurent.B dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 18/01/2010, 16h28
  2. A quoi sert XML-Schema
    Par Community Management dans le forum Valider
    Réponses: 20
    Dernier message: 26/01/2009, 09h52
  3. a quoi sert le schema dans postgres ??
    Par champion dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 13/09/2004, 10h25
  4. [info] A quoi sert ImageObserver ?
    Par FrigoAcide dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/03/2004, 17h20

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