{"id":5036,"date":"2015-06-28T15:29:01","date_gmt":"2015-06-28T13:29:01","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/"},"modified":"2015-06-28T15:29:01","modified_gmt":"2015-06-28T13:29:01","slug":"oracle-log-writer-and-write-ahead-logging","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/","title":{"rendered":"Oracle Log Writer and Write-Ahead-Logging"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<\/p>\n<p dir=\"ltr\" lang=\"en\">I posted a tweet with a link to a very old document &#8211; 20 years old &#8211; about &#8216;internals of recovery&#8217;. It&#8217;s a gem. All the complexity of the ACID mecanisms of Oracle are explained in a very simple way. It was written for Oracle 7.2 but it&#8217;s incredible to see how much the basic things are still relevant today. Of course, there is \u00a0a reason for that: the mecanisms of recovery are critical and must be stable. There is one more reason in my opinion: the Oracle RDBMS software was very well designed, then the basic structures designed 20 years ago are still able to cope with new features, and to scale with very large databases, through the versions and the years.<\/p>\n<blockquote class=\"twitter-tweet\" lang=\"en\">\n<p dir=\"ltr\" lang=\"en\">It&#8217;s 20 years old but it&#8217;s still the best written document I&#8217;ve read about how Oracle works <a href=\"http:\/\/t.co\/4CAI4Q5MIm\">http:\/\/t.co\/4CAI4Q5MIm<\/a> <a href=\"http:\/\/t.co\/mmgA50JzMQ\">http:\/\/t.co\/mmgA50JzMQ<\/a><\/p>\n<p>\u2014 Franck Pachot (@FranckPachot) <a href=\"https:\/\/twitter.com\/FranckPachot\/status\/614519811046002688\">June 26, 2015<\/a><\/p><\/blockquote>\n<p dir=\"ltr\" lang=\"en\">If you check the conversation that followed, a doubt has been raised about the following sentence:<\/p>\n<p style=\"padding-left: 30px\"><em>According to write-ahead log protocol, before DBWR can write out a cache buffer containing a modified datablock, LGWR must write out the redo log buffer containing redo records describing changes to that datablock.<\/em><\/p>\n<p dir=\"ltr\" lang=\"en\">There are 2 ways to clear out that kind of doubt: read and test. And we need both of them because:<\/p>\n<ul>\n<li>documentation may have bug<\/li>\n<li>software may have bug<\/li>\n<\/ul>\n<p dir=\"ltr\" lang=\"en\">so you can be sure about a behaviour only when both documentation and test validates your assumption.<\/p>\n<h3>Documentation<\/h3>\n<p dir=\"ltr\" lang=\"en\">The first documentation I find about it is another gem describing how Oracle works: Jonathan Lewis &#8216;<a href=\"http:\/\/www.apress.com\/9781430239543\">Oracle Core<\/a>\u00a0(Apress)&#8217;. And it&#8217;s clearly stated that:<\/p>\n<p style=\"padding-left: 30px\"><em>One of the most important features of the Oracle code is that the database writer will not write a changed block to disk before the log writer has written the redo that describes how the block was changed. This write-ahead logging strategy is critical to the whole recovery mechanism.<\/em><\/p>\n<p dir=\"ltr\" lang=\"en\">Then there is of course the <a href=\"https:\/\/docs.oracle.com\/database\/121\/CNCPT\/process.htm#sthref1935\">Oracle Documentation<\/a>:<\/p>\n<p style=\"padding-left: 30px\"><em>Before DBW can write a dirty buffer, the database must write to disk the redo records associated with changes to the buffer (the write-ahead protocol). If DBW discovers that some redo records have not been written, it signals LGWR to write the records to disk, and waits for LGWR to complete before writing the data buffers to disk.<\/em><\/p>\n<h3>Test case<\/h3>\n<p>Ok, that should be enough. But I want to do a simple testcase in order to see if anything has changed in the latest version (12.1.0.2). My idea is to check two things:<\/p>\n<ul>\n<li>whether a checkpoint is requesting so work to be done by logwriter<\/li>\n<li>whether a change is written to redo log after a checkpoint, without waiting the usual<\/li>\n<\/ul>\n<p>I create a table:<\/p>\n<pre><code>19:07:21 SQL&gt; create table DEMO as select '--VAL--1--'||to_char(current_timestamp,'hh24missffff') val from dual;<\/code><\/pre>\n<p>Table created.<\/p>\n<pre><code>19:07:21 SQL&gt; select * from DEMO;\nVAL\n ----------------------------------\n --VAL--1--190721367902367902<\/code><\/pre>\n<p>I start with a new logfile:<\/p>\n<pre><code>19:07:21 SQL&gt; alter system switch logfile;\nSystem altered.<\/code><\/pre>\n<p dir=\"ltr\" lang=\"en\">And I retrieve the log writer process id for future use:<\/p>\n<pre><code>19:07:21 SQL&gt; column spid new_value pid\n19:07:21 SQL&gt; select spid,pname from v$process where pname='LGWR';\nSPID PNAME\n ------------------------ -----\n 12402 LGWR\n19:07:21 SQL&gt; host ps -fp &amp;pid\n UID PID PPID C STIME TTY TIME CMD\n oracle 12402 1 0 Jun25 ? 00:00:46 ora_lgwr_DEMO14<\/code><\/pre>\n<h3>update and commit<\/h3>\n<p>Here is a scenario where I update and commit:<\/p>\n<pre><code>19:07:21 SQL&gt; update DEMO set val='--VAL--2--'||to_char(current_timestamp,'hh24missffff');\n1 row updated.\n19:07:21 SQL&gt; select * from DEMO;\nVAL\n ----------------------------------\n --VAL--2--190721443102443102\n19:07:21 SQL&gt; commit;\nCommit complete.<\/code><\/pre>\n<p>I want to see if a checkpoint has something to wait from the log writer, so I freeze the log writer:<\/p>\n<pre><code>19:07:21 SQL&gt; host <b>kill -sigstop<\/b> &amp;pid<\/code><\/pre>\n<p>and I checkpoint:<\/p>\n<pre><code>19:07:21 SQL&gt; alter system checkpoint;\nSystem altered.<\/code><\/pre>\n<p>No problem. The checkpoint did not require anything from log writer in that case. Note that the dirty buffers related redo has already been written to disk at commit (and log writer was running at that time).<\/p>\n<p>I un-freeze it for the next test:<\/p>\n<pre><code>19:07:21 SQL&gt; host <b>kill -sigcont<\/b> &amp;pid\n<\/code><\/pre>\n<h3>update without commit<\/h3>\n<p>Now I&#8217;m doing the same but without commit. My goal is to see if uncommited dirty blocks need their redo to be written to disk.<\/p>\n<pre><code>19:07:51 SQL&gt; select * from DEMO;\nVAL\n ----------------------------------\n --VAL--2--190721443102443102\n19:07:51 SQL&gt; host kill -sigstop &amp;pid\n19:07:51 SQL&gt; update DEMO set val='--VAL--3--'||to_char(current_timestamp,'hh24missffff');\n1 row updated.\n19:07:51 SQL&gt; alter system checkpoint;<\/code><\/pre>\n<p>Here it hangs. Look at the wait events:<\/p>\n<p><a class=\"easyblog-thumb-preview\" title=\"CaptureLGWR.JPG\" href=\"http:\/\/dbi-services.com\/blog\/images\/easyblog_images\/139\/CaptureLGWR.JPG\"><img decoding=\"async\" title=\"b2ap3_thumbnail_CaptureLGWR.JPG\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg\" alt=\"b2ap3_thumbnail_CaptureLGWR.JPG\" \/><\/a><\/p>\n<p>My checkpoint is waiting on &#8216;rdbms ipc reply&#8217; until the log writer is woken up.<\/p>\n<pre><code>$ kill -sigcont 12402\nSystem altered.\n19:09:37 SQL&gt; select * from DEMO;\nVAL\n ----------------------------------\n --VAL--3--190751477395477395<\/code><\/pre>\n<p>The checkpoint is done.<\/p>\n<p>Note that if I run the same but wait 3 seconds after the update (because I know that log writer writes redo at least every 3 seconds even not asked to do it):<\/p>\n<pre><code>21:33:35 SQL&gt; update DEMO set val='--VAL--3--'||to_char(current_timestamp,'hh24missffff');\n1 row updated.\n21:33:35 SQL&gt; host sleep 3\n21:33:38 SQL&gt; host kill -sigstop &amp;pid\n21:33:38 SQL&gt; alter system checkpoint;\nSystem altered.\n21:33:38 SQL&gt;<\/code><\/pre>\n<p>checkpoint is not waiting because all the redo that covers the dirty buffers are alerady written.<\/p>\n<p>I&#8217;ve also checked that immediately after the checkpoint (without stopping the log writer here) the uncommited change is written to the redo log files:<\/p>\n<pre><code>21:56:38 SQL&gt; select group#,v$log.status,member from v$log join v$logfile using(group#) where v$log.status='CURRENT';\nGROUP# STATUS MEMBER\n ---------- ---------------- ----------------------------------------\n 2 CURRENT \/u01\/DEMO\/oradata\/DEMO14\/redo02.log\n21:56:38 SQL&gt; update DEMO set val='--VAL--2--'||to_char(current_timestamp,'hh24missffff');\n1 row updated.\n21:56:38 SQL&gt; select * from DEMO;\nVAL\n ----------------------------------\n --VAL--2--215638557183557183\n21:56:38 SQL&gt; alter system checkpoint;\nSystem altered.\n21:56:38 SQL&gt; host strings &amp;redo | grep \"VAL--\"\n --VAL--1--215638376899376899\n --VAL--2--2156385571<\/code><\/pre>\n<p>A simple grep reveals that redo has been written (I&#8217;ve no other activity in the database &#8211; so no concurrent commits here).<\/p>\n<h3>Conclusion<\/h3>\n<p>Even if some mecanisms have been improved (see Jonathan lewis book for them) for performance, the fundamentals have not changed.<\/p>\n<p>I&#8217;ve said that there are two ways to validated an assumption: documention and test.<br \/>\nBut there is a third one: understanding.<\/p>\n<p>When you think about it, if you write uncommited changes to the files, then you must be able to rollback them in case of recovery. Where is the rollback information? In the undo blocks. Are the undo blocks written on disk when the database is written on disk? You don&#8217;t know. Then where do you find the undo information in case of recovery? The redo genereated by the transaction contains change vectors for data blocks and for undo blocks. Then if you are sure that all redo is written before the block containing uncomitted changes, then you are sure to be able to rollback those uncommited changes.<\/p>\n<p>Note that this occurs only for modifications through buffer cache. Direct-path insert do not need to be covered by redo to be undone. It&#8217;s the change of high water mark that will be undone and this one is done in buffer cache, protected by redo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . I posted a tweet with a link to a very old document &#8211; 20 years old &#8211; about &#8216;internals of recovery&#8217;. It&#8217;s a gem. All the complexity of the ACID mecanisms of Oracle are explained in a very simple way. It was written for Oracle 7.2 but it&#8217;s incredible to see [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":5037,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[198,59],"tags":[],"type_dbi":[],"class_list":["post-5036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-management","category-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle Log Writer and Write-Ahead-Logging - dbi Blog<\/title>\n<meta name=\"description\" content=\"WAL in Oracle\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle Log Writer and Write-Ahead-Logging\" \/>\n<meta property=\"og:description\" content=\"WAL in Oracle\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-06-28T13:29:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"396\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Oracle Log Writer and Write-Ahead-Logging\",\"datePublished\":\"2015-06-28T13:29:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\"},\"wordCount\":911,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg\",\"articleSection\":[\"Database management\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\",\"name\":\"Oracle Log Writer and Write-Ahead-Logging - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg\",\"datePublished\":\"2015-06-28T13:29:01+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"WAL in Oracle\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg\",\"width\":500,\"height\":396},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle Log Writer and Write-Ahead-Logging\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oracle Log Writer and Write-Ahead-Logging - dbi Blog","description":"WAL in Oracle","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:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/","og_locale":"en_US","og_type":"article","og_title":"Oracle Log Writer and Write-Ahead-Logging","og_description":"WAL in Oracle","og_url":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/","og_site_name":"dbi Blog","article_published_time":"2015-06-28T13:29:01+00:00","og_image":[{"width":500,"height":396,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg","type":"image\/jpeg"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Oracle Log Writer and Write-Ahead-Logging","datePublished":"2015-06-28T13:29:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/"},"wordCount":911,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg","articleSection":["Database management","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/","url":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/","name":"Oracle Log Writer and Write-Ahead-Logging - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg","datePublished":"2015-06-28T13:29:01+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"WAL in Oracle","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/b2ap3_thumbnail_CaptureLGWR.jpg","width":500,"height":396},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-log-writer-and-write-ahead-logging\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle Log Writer and Write-Ahead-Logging"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/5036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=5036"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/5036\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/5037"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=5036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=5036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=5036"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=5036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}