{"id":4380,"date":"2025-03-06T13:00:07","date_gmt":"2025-03-06T16:00:07","guid":{"rendered":"https:\/\/powertuning.com.br\/?p=4380"},"modified":"2025-03-06T09:31:39","modified_gmt":"2025-03-06T12:31:39","slug":"oracle-snapshot-too-old-tablespace-undo","status":"publish","type":"post","link":"https:\/\/powertuning.com.br\/blog\/oracle-snapshot-too-old-tablespace-undo\/","title":{"rendered":"[Oracle] SNAPSHOT TOO OLD &#8211; TABLESPACE UNDO"},"content":{"rendered":"<p>Antes de conversamos sobre este erro que muito \u00e9 n\u00f3s apresentado, precisamos falar um pouco sobre o conceito da tablespace de undo. Eu sei que para muitas pessoas este assunto j\u00e1 e sabido, porem para os novos DBA\u00b4s pode ser mais uma fonte de conhecimento, e eu no fundo do cora\u00e7\u00e3o espero que seja .<\/p>\n<p><b><u>Conceito da Tablespace de UNDO<\/u><\/b><\/p>\n<p>A tablespace de undo \u00e9 usada para armazenar informa\u00e7\u00f5es antigas dos blocos de dados que foram modificados, permitindo que as transa\u00e7\u00f5es possam ser revertidas, caso necess\u00e1rio. Essas informa\u00e7\u00f5es s\u00e3o conhecidas como imagens antes das altera\u00e7\u00f5es (ou undo records). Mesmo ap\u00f3s o\u00a0<code>commit<\/code>, esses registros de undo n\u00e3o s\u00e3o imediatamente liberados, pois podem ser necess\u00e1rios para outras transa\u00e7\u00f5es ou para opera\u00e7\u00f5es como o flashback query. O espa\u00e7o na tablespace de undo \u00e9 liberado gradualmente, \u00e0 medida que o Oracle identifica que os registros de undo n\u00e3o s\u00e3o mais necess\u00e1rios.<\/p>\n<p>Por este motivo, podemos nos deparar com um erro chamado\u00a0<strong>SNAPSHOT TOO OLD<\/strong>. Esse erro basicamente indica que os blocos de undo est\u00e3o sendo reutilizados antes que as transa\u00e7\u00f5es que dependem deles tenham sido conclu\u00eddas, e n\u00e3o h\u00e1 espa\u00e7o suficiente na tablespace de UNDO para armazenar novas imagens. Como mencionado, o Oracle mant\u00e9m essas imagens de undo por um determinado per\u00edodo, liberando o espa\u00e7o aos poucos. Isso pode ocorrer especialmente ap\u00f3s uma longa transa\u00e7\u00e3o que consumiu grande parte do espa\u00e7o de UNDO e, em seguida, o banco de dados \u00e9 submetido a outro longo UPDATE. Se n\u00e3o houver espa\u00e7o suficiente dispon\u00edvel no UNDO, podemos nos deparar com esse erro.<\/p>\n<p>Existem algumas categorias que devemos saber, pois o oracle segue uma sequencia de libera\u00e7\u00e3o sendo o primeiro EXPIRED depois o UNEXPIRED e por \u00faltimo ACTIVE caso ele precise vitimizar os blocos.<\/p>\n<p><b>ACTIVE<\/b>\u00a0&#8211; Est\u00e1 sendo utilizado<\/p>\n<p><b>UNEXPIRED\u00a0<\/b>&#8211; Transa\u00e7\u00f5es foram comitados porem nao ultrapassou o tempo de UNDO_RETENTION<\/p>\n<p><b>EXPIRED\u00a0<\/b>&#8211; Transa\u00e7\u00f5es j\u00e1 foram comitadas, e os blocos podem ser utilizados.<\/p>\n<p>A query abaixo mostra o que foi explicado acima :<\/p>\n<p>SELECT segment_name, status, tablespace_name, bytes\/1024\/1024 MB<\/p>\n<p>FROM dba_undo_extents<\/p>\n<p>WHERE tablespace_name = &#8216;nome_de_undo&#8217;<\/p>\n<p>ORDER BY status;<\/p>\n<p>Beleza ? Agora voce me pergunta t\u00e1 e como eu resolvo isso ?<br \/>\nGalera o que eu posso falar e o que eu fiz, e naquele determinado tempo e condi\u00e7\u00e3o deu certo.<br \/>\nExistem alguns parametros que podem ser utilizados. Coloquem alguns aqui abaixo pois estes parametros funcionaram para mim.<\/p>\n<p>Enfim o que eu fiz ?<\/p>\n<p>Alterei a UNDO_RETENTION para o tempo minimo e alterei a tablespace de UNDO para NOGUARANTEE.<\/p>\n<p>*********************************************************************************** *ALTER TABLESPACE nome_da_undo_tablespace RETENTION NOGUARANTEE;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 *<br \/>\n***********************************************************************************<\/p>\n<div><\/div>\n<p>Segue abaixo a explica\u00e7\u00e3o destes par\u00e2metros<\/p>\n<p><b>UNDO NOGUARANTEE<\/b>\u00a0&#8211; Ele vai utilizar os blocos e nao vai respeitar a UNDO_RETENTION, pois ira precisar dos blocos.<\/p>\n<p><b>UNDO RETENTION<\/b>: Parametro que definie o tempo m\u00ednimo que Oracle deve reter as informa\u00e7\u00f5es de undo ap\u00f3s uma transa\u00e7\u00e3o ter sido conclu\u00edda.<\/p>\n<p>Galera , valeu e at\u00e9 a pr\u00f3xima!!!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Antes de conversamos sobre este erro que muito \u00e9 n\u00f3s apresentado, precisamos falar um pouco sobre o conceito da tablespace de undo. Eu sei que para muitas pessoas este assunto j\u00e1 e sabido, porem para os novos DBA\u00b4s pode ser mais uma fonte de conhecimento, e eu no fundo do cora\u00e7\u00e3o espero que seja .&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/powertuning.com.br\/blog\/oracle-snapshot-too-old-tablespace-undo\/\">Leia mais<\/a><\/p>\n","protected":false},"author":23,"featured_media":4439,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[176,70],"tags":[312,13,33,335,333,315,72,313,339,334,336,337,331,158,328,326,338,332,329,330],"class_list":["post-4380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-banco-de-dados","category-oracle","tag-administracao-de-banco-de-dados","tag-banco-de-dados","tag-dba","tag-dba-oracle","tag-flashback-query","tag-gerenciamento-de-armazenamento","tag-oracle","tag-oracle-database","tag-oracle-errors","tag-parametros-oracle","tag-performance-de-banco-de-dados","tag-query-optimization","tag-snapshot-too-old","tag-sql","tag-tablespace-de-undo","tag-troubleshooting","tag-undo-guarantee","tag-undo-records","tag-undo-retention","tag-undo-tablespace"],"jetpack_featured_media_url":"https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2025\/03\/ORACLE-TOO-OLD.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts\/4380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/comments?post=4380"}],"version-history":[{"count":1,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts\/4380\/revisions"}],"predecessor-version":[{"id":4382,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts\/4380\/revisions\/4382"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/media\/4439"}],"wp:attachment":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/media?parent=4380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/categories?post=4380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/tags?post=4380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}