{"id":187,"date":"2014-05-12T15:09:45","date_gmt":"2014-05-12T13:09:45","guid":{"rendered":"http:\/\/explainit.pl\/blog\/?p=187"},"modified":"2016-08-16T17:39:20","modified_gmt":"2016-08-16T15:39:20","slug":"walczymy-ze-zbednym-redo","status":"publish","type":"post","link":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/","title":{"rendered":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)"},"content":{"rendered":"<p>Jak dobrze wiemy, serwer bazy danych Oracle Database zapewnia odtwarzalno\u015b\u0107 realizowanych transakcji poprzez generowanie informacji Redo zapisywanych w dziennikach powt\u00f3rze\u0144 (redo logs). Gdy zdarzy si\u0119 awaria, informacje te pozwalaj\u0105 zrekonstruowa\u0107 stan bazy danych b\u0119d\u0105cy skutkiem transakcji zrealizowanych przed awari\u0105. Istniej\u0105 jednak sytuacje, w kt\u00f3rych programi\u015bcie wcale nie zale\u017cy na zabezpieczeniu transakcji, a wr\u0119cz postrzega on zapisy informacji Redo jako element spowalniaj\u0105cy funkcjonowanie ca\u0142ego systemu. Na przyk\u0142ad \u2013 podczas zapisywania w bazie danych informacji tymczasowych, kt\u00f3re wi\u0105\u017c\u0105 si\u0119 z aktualnie realizowanym algorytmem przetwarzania danych i po jego ewentualnej awarii s\u0105 ca\u0142kowicie bezu\u017cyteczne.<\/p>\n<p>Aby pozwoli\u0107 programi\u015bcie na decydowanie, kt\u00f3re operacje maj\u0105 by\u0107 zabezpieczane przez Redo, a kt\u00f3re niekoniecznie, Oracle ju\u017c kilka wersji temu wprowadzi\u0142 mechanizm tabel tymczasowych \u2013 Global Temporary Tables (chocia\u017c lokalnych si\u0119 ju\u017c nie doczekali\u015bmy&#8230;). Tabele tymczasowe maj\u0105 dwie wa\u017cne cechy: (1) nie zapewniaj\u0105 trwa\u0142o\u015bci wprowadzonych rekord\u00f3w, (2) operacje na nich generuj\u0105 mniej Redo ni\u017c w przypadku tabel trwa\u0142ych.<\/p>\n<p>Oto przyk\u0142ad prostego eksperymentu pokazuj\u0105cego ilo\u015b\u0107 informacji Redo generowanych podczas operacji DML na tabeli trwa\u0142ej (test_perm) i tabeli tymczasowej (test_temp):<\/p>\n<p><code>SQL&gt; set autotrace on<br \/>\nSQL&gt; create table test_perm as select * from dba_extents where 1=0;<br \/>\nSQL&gt; create global temporary table test_temp on commit delete rows as<br \/>\nselect * from dba_extents where 1=0;<br \/>\nSQL&gt; insert into test_perm select * from dba_extents;<br \/>\n...<br \/>\nStatistics<br \/>\n--------------------------------<br \/>\n831896 redo size<br \/>\nSQL&gt; insert into test_temp select * from dba_extents;<br \/>\n...<br \/>\nStatistics<br \/>\n--------------------------------<br \/>\n47360 redo size<br \/>\n<\/code><\/p>\n<p>Zapisy Redo s\u0105 wyra\u017anie mniejsze dla tabeli tymczasowej ani\u017celi w przypadku tabeli trwa\u0142ej (a z tabeli trwa\u0142ej nale\u017ca\u0142oby dodatkowo jeszcze kiedy\u015b te rekordy usun\u0105\u0107!). Nadal jednak s\u0105 zauwa\u017calne. Dlaczego? Ot\u00f3\u017c wydaje si\u0119, \u017ce programi\u015bci Oracle przeoczyli pewien fakt \u2013 wprawdzie operacje DML wykonywane na tabeli tymczasowej nie generuj\u0105 bezpo\u015brednich zapis\u00f3w Redo, to jednak musz\u0105 generowa\u0107 zapisy Undo (zapewnianie sp\u00f3jno\u015bci transakcji), a te z kolei generuj\u0105 swoje zapisy Redo&#8230;<\/p>\n<p>B\u0142\u0105d ten zosta\u0142 naprawiony w wersji 12c serwera bazy danych. Wprowadzono mechanizm pozwalaj\u0105cy umieszcza\u0107 Undo operacji na tabelach tymczasowych w przestrzeni tymczasowej (zamiast w przestrzeni wycofania), dzi\u0119ki czemu nie jest dla nich generowane Redo. Mechanizm ten, nazwany Temporary Undo, nale\u017cy w\u0142\u0105czy\u0107 za pomoc\u0105 parametru temp_undo_enabled=true (uwaga na \u201efeature\u201d opisane w http:\/\/docs.oracle.com\/database\/121\/ADMIN\/undo.htm#ADMIN13741 &#8211; \u201eWhen a session uses temporary objects for the first time, the current value of the TEMP_UNDO_ENABLED initialization parameter is set for the rest of the session. Therefore, if temporary undo is enabled for a session and the session uses temporary objects, then temporary undo cannot be disabled for the session. Similarly, if temporary undo is disabled for a session and the session uses temporary objects, then temporary undo cannot be enabled for the session.\u201d ):<\/p>\n<p><code>SQL&gt; alter session set temp_undo_enabled=true;<br \/>\nSQL&gt; insert into test_temp select * from dba_extents;<br \/>\n...<br \/>\nStatistics<br \/>\n--------------------------------<br \/>\n272 redo size<br \/>\n<\/code><\/p>\n<p>I nareszcie jeste\u015bmy zadowoleni!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak dobrze wiemy, serwer bazy danych Oracle Database zapewnia odtwarzalno\u015b\u0107 realizowanych transakcji poprzez generowanie informacji Redo zapisywanych w dziennikach powt\u00f3rze\u0144 (redo logs). Gdy zdarzy si\u0119 awaria, informacje te pozwalaj\u0105 zrekonstruowa\u0107 stan bazy danych b\u0119d\u0105cy skutkiem transakcji zrealizowanych przed awari\u0105. Istniej\u0105 jednak sytuacje, w kt\u00f3rych programi\u015bcie wcale nie zale\u017cy na zabezpieczeniu transakcji, a wr\u0119cz postrzega on <a href=\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)<\/span>[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[14,21],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled) - Explain IT<\/title>\n<meta name=\"description\" content=\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled) - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-12T13:09:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-08-16T15:39:20+00:00\" \/>\n<meta name=\"author\" content=\"Maciej Zakrzewicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maciej Zakrzewicz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\"},\"author\":{\"name\":\"Maciej Zakrzewicz\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\"},\"headline\":\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)\",\"datePublished\":\"2014-05-12T13:09:45+00:00\",\"dateModified\":\"2016-08-16T15:39:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\"},\"wordCount\":432,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"keywords\":[\"Oracle Database 12c\",\"wydajno\u015b\u0107\"],\"articleSection\":[\"Oracle Database\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\",\"name\":\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled) - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2014-05-12T13:09:45+00:00\",\"dateModified\":\"2016-08-16T15:39:20+00:00\",\"description\":\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"name\":\"Explain IT\",\"description\":\"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.\",\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\",\"name\":\"Explain IT\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"contentUrl\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"width\":196,\"height\":64,\"caption\":\"Explain IT\"},\"image\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\",\"name\":\"Maciej Zakrzewicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"caption\":\"Maciej Zakrzewicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled) - Explain IT","description":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/","og_locale":"pl_PL","og_type":"article","og_title":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled) - Explain IT","og_description":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)","og_url":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/","og_site_name":"Explain IT","article_published_time":"2014-05-12T13:09:45+00:00","article_modified_time":"2016-08-16T15:39:20+00:00","author":"Maciej Zakrzewicz","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Maciej Zakrzewicz","Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#article","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/"},"author":{"name":"Maciej Zakrzewicz","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219"},"headline":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)","datePublished":"2014-05-12T13:09:45+00:00","dateModified":"2016-08-16T15:39:20+00:00","mainEntityOfPage":{"@id":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/"},"wordCount":432,"commentCount":0,"publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"keywords":["Oracle Database 12c","wydajno\u015b\u0107"],"articleSection":["Oracle Database"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/","url":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/","name":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled) - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2014-05-12T13:09:45+00:00","dateModified":"2016-08-16T15:39:20+00:00","description":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/2014\/05\/12\/walczymy-ze-zbednym-redo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Walczymy ze zb\u0119dnym REDO w Oracle Database 12c! (temp_undo_enabled)"}]},{"@type":"WebSite","@id":"https:\/\/explainit.pl\/wordpress\/#website","url":"https:\/\/explainit.pl\/wordpress\/","name":"Explain IT","description":"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.","publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/explainit.pl\/wordpress\/#organization","name":"Explain IT","url":"https:\/\/explainit.pl\/wordpress\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/","url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","contentUrl":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","width":196,"height":64,"caption":"Explain IT"},"image":{"@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219","name":"Maciej Zakrzewicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","caption":"Maciej Zakrzewicz"}}]}},"_links":{"self":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/187"}],"collection":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=187"}],"version-history":[{"count":2,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/187\/revisions"}],"predecessor-version":[{"id":378,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/187\/revisions\/378"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}