web-dev-qa-db-fra.com

À quelle hauteur puis-je définir une rétention d'annulation sur Oracle 11Gr2

Est-il viable de définir une rétention d'annulation très élevée, de manière à permettre aux interrogations de flashback plusieurs semaines à temps?

Naturellement, suffisamment d'espace doivent être disponibles dans les espaces de table des annulations pour contenir la quantité de données d'annulation requises. Y a-t-il d'autres limitations que je devrais être au courant?

Que se passe-t-il s'il n'y a pas assez d'espace d'annulation disponible? La production sera-t-elle affectée de quelque manière que ce soit, ou est-ce juste une question de flashback et de restauration en étant limitée (instantané trop vieux, etc.).

Mettre à jour:

Avec une génération typique des annulations d'un peu moins de 1 Go par jour par instance, et jusqu'à 64 Go d'une valeur d'annulation par exemple, il semble viable avec une cible de rétention de 30 jours. Non?

2
Roy

Bien que je ne l'ai pas essayé, j'aurais tendance à soupçonner que vous rencontrez des problèmes lorsque votre UNDO_RETENTION dépasse la durée du temps que Oracle maintient sa cartographie du SCN à l'horodatage. Si la mémoire sert, c'est-à-dire environ 1 semaine (Eh bien, si la mémoire sert, c'était 1 semaine dans les 10 g de jours et je ne suis au courant de rien qui aurait changé cela dans 11.2). J'aurais tendance à soupçonner que Oracle utiliserait cette cartographie pour déterminer quels segments UNDO sont suffisamment vieux qu'ils devraient être purgés et que vous commencez à rencontrer des problèmes si vous avez dépassé cette limite.

Sur mon système 11.2, par exemple, je peux convertir il y a 7 jours à un SCN puis de retour à un horodatage mais pas il y a 8 jours

  1* select scn_to_timestamp( timestamp_to_scn( systimestamp - 7) ) from dual
SQL> /

SCN_TO_TIMESTAMP(TIMESTAMP_TO_SCN(SYSTIMESTAMP-7))
---------------------------------------------------------------------------
06-NOV-12 01.06.47.000000000 PM

SQL> ed
Wrote file afiedt.buf

  1* select scn_to_timestamp( timestamp_to_scn( systimestamp - 8) ) from dual
SQL> /
select scn_to_timestamp( timestamp_to_scn( systimestamp - 8) ) from dual
                         *
ERROR at line 1:
ORA-08180: no snapshot found based on specified time
ORA-06512: at "SYS.TIMESTAMP_TO_SCN", line 1

J'aurais donc tendance à soupçonner sur mon système, donc si j'ai essayé de conserver 8 jours de UNDO que Oracle aurait généralement un problème de conforme. Il faudrait une semaine pour vérifier d'une manière ou d'une autre, mais si je devais y parier, j'aurais tendance à miser que d'essayer de tenir plus d'une semaine de UNDO _ échouerait.

Même si vous pouviez conserver le UNDO aussi long, la formulation de la requête de flashback serait un défi majeur puisque vous ne pouviez pas spécifier un horodatage. Vous pouvez potentiellement conserver votre propre cartographie (plus à long terme) entre le SCN et l'horodatage en écrivant un travail automatisé capturer toutes les deux quelques secondes et les maintenir pendant des semaines ou des mois à la fois, puis spécifiez AS OF SCN Dans vos requêtes de flashback. J'avais tendance à m'attendre à ce que le plus ancien UNDO serait parti mais cela pourrait fonctionner.

3
Justin Cave

Très élevé est un terme relatif qui dépend de la perspective. Vous pourriez dire 1 heure, 1 mois, 1 an, etc. En supposant que vous signiez quelque chose entre une minute et un mois, la réponse dépendra de combien d'annulation est produite et de la quantité de stockage disponible. Je n'ai rien vu plus de deux semaines.

Oracle gère automatiquement l'espace des annulations et diminuera de manière dynamique la rétention inférieure au réglage de rétention des annulations si les contraintes d'espace l'exigent. La mise en garde à c'était lorsque l'épaisseur d'annulation a une rétention garantie.

Le Guide de l'administrateur de la base de données Oracle couvre toutes ces informations sur une page . Voici quelques extraits:

La base de données Oracle Tunise automatiquement la période de rétention des annulations basée sur la taille et l'activité du système de l'espace de table desserré. Vous pouvez éventuellement spécifier une période de conservation minimale des annulations (en secondes) en définissant le UNDO_RETENTION Paramètre d'initialisation. L'impact exact de ce paramètre sur l'annulation de la rétention est la suivante:

  • Le UNDO_RETENTION Le paramètre est ignoré pour une taille de taille de taille fixe. La base de données a toujours évoqué la période de rétention des annulations pour la meilleure rétention possible, basée sur l'activité système et la taille des espaces de table. Voir "Tonge automatique de l'annulation de la rétention" pour plus d'informations.

  • Pour une épisette d'annulation avec l'option AUTOEXTEND activé, la base de données tente d'honorer la période de conservation minimale spécifiée par UNDO_RETENTION. Lorsque l'espace est faible, au lieu d'écraser des informations non expirées annulaires, l'espace de table s'étend automatiquement. Si la clause MAXSIZE est spécifiée pour un espace de table d'annulation de l'extension automatique, lorsque la taille maximale est atteinte, la base de données peut commencer à écraser les informations non expirées. L'espace de table desdotbs1 qui est automatiquement créé par DBCA s'étend automatiquement.

...

Pour garantir le succès des requêtes à long terme ou des opérations de flashback Oracle, vous pouvez activer la garantie de rétention. Si la garantie de conservation est activée, la rétention minimale d'annulation spécifiée est garantie; La base de données n'a jamais écrasé des données d'annulation non expirées, même si cela signifie que les transactions échouent en raison du manque d'espace dans l'épaisseur desserré. Si la garantie de conservation n'est pas activée, la base de données peut remplacer non expiré annuler lorsque l'espace est faible, abaissant ainsi la rétention des annulations pour le système. Cette option est désactivée par défaut.

3
Leigh Riffel