{"id":34194,"date":"2024-07-31T17:30:18","date_gmt":"2024-07-31T15:30:18","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=34194"},"modified":"2024-07-31T17:30:20","modified_gmt":"2024-07-31T15:30:20","slug":"automatic-transaction-rollback-in-oracle-database-23ai","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/","title":{"rendered":"Automatic Transaction Rollback in Oracle Database 23ai"},"content":{"rendered":"<p>In the Oracle Database 23ai Enterprise Edition, it is now possible to automatically rollback some transactions, and a set of new parameters have been added to control this behavior.<\/p>\n<p>Of course implementing this feature requires deep understanding of your application, data model and source code.<\/p>\n<h3>The general idea :<\/h3>\n<p>* We don&#8217;t want critical transactions to be delayed for too long due to row locks caused by less important transactions.<br \/>\n* The new parameters would allow us to define if a transaction T1 is considered more important than a transaction T2.<br \/>\n* The new parameters would also let us set waiting thresholds, specifying how many seconds T1 will wait for the less important T2 to release the lock before forcing a rollback.<\/p>\n<h3>The parameters<\/h3>\n<p>The parameters that are controlling this feature are :<\/p>\n<div>\n<div id=\"highlighter_413051\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">txt_priority<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">txn_auto_rollback_mode<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">txn_auto_rollback_high_priority_wait_target   <\/code><\/div>\n<div class=\"line number4 index2 alt2\"><code class=\"bash plain\">txn_auto_rollback_medium_priority_wait_target <\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Let&#8217;s see what each parameter means :<\/p>\n<p>1-TXN_PRIORITY <\/p>\n<p>This is where we define each transaction importance, it is used at session level.<\/p>\n<p>We use the alter session command; and HIGH is the default value.<\/p>\n<div>\n<div id=\"highlighter_204009\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">SQL&gt; alter session <\/code><code class=\"bash functions\">set<\/code> <code class=\"bash plain\">txn_priority = HIGH;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">SQL&gt; alter session <\/code><code class=\"bash functions\">set<\/code> <code class=\"bash plain\">txn_priority = MEDIUM;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">SQL&gt; alter session <\/code><code class=\"bash functions\">set<\/code> <code class=\"bash plain\">txn_priority = LOW;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>2 &#8211; TXN_AUTO_ROLLBACK_HIGH_PRIORITY_WAIT_TARGET and TXN_AUTO_ROLLBACK_MEDIUM_PRIORITY_WAIT_TARGET :<\/p>\n<p>These are the waiting thresholds in seconds, defined at SYSTEM level.<br \/>\nThey controls how many seconds would a high or medium transaction wait for a lesser important transaction over the same row locks.<\/p>\n<p>These targets have the following characteristics :<\/p>\n<p>* The minimum possible value is 1. (1 second)<br \/>\n* It can be set at PDB level, so pluggable databases can have different thresholds.<br \/>\n* In a RAC database, instances can also be set at different values.<\/p>\n<p>For instance, to set a target of 30 seconds for high priority transactions :<\/p>\n<div>\n<div id=\"highlighter_830512\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">SQL&gt; alter system <\/code><code class=\"bash functions\">set<\/code> <code class=\"bash plain\">txn_auto_rollback_high_priority_wait_target = 30;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It is very important to note that this does NOT mean a high priority transaction will always wait for &#8220;only&#8221; 30 seconds.<\/p>\n<p>For instance :<\/p>\n<p>If you have a high transaction T1 waiting for a medium transaction T2, which is waiting for a low transaction T3, all for the same row locks, then the 30 seconds count will only start when T2 receive the lock, so you have to add also the time when T2 had been itself waiting for T3.<\/p>\n<p>3- TXN_AUTO_ROLLBACK_MODE :<\/p>\n<p>This is the feature&#8217;s mode, and it is defined at system level.<br \/>\nIt may have as a value : &#8220;ROLLBACK&#8221; (the default) or &#8220;TRACK&#8221;.<br \/>\nIf you set the mode at &#8216;track&#8217;, then the feature will just track and report the cases, no automatic rollback will happen.<\/p>\n<p>So this mode (TRACK) could be a great way to test the feature&#8217;s effect before properly implementing it.<\/p>\n<p>This parameter has the following characteristics :<\/p>\n<p>* it is pdb mofifiable, so each pluggable database can have a different value.<br \/>\n* However RAC instances MUST have the same value.<\/p>\n<h3> Example <\/h3>\n<p>We will do a simple test : We will make a low priority session (Session 1) update a row without commiting, and then try to update the same row in a high priority session (Session 2).<br \/>\nWe will also use this case to illustrate that the thresholds are PDB defined, and to check some ways to see statistics about rollback operations.<\/p>\n<p>Let&#8217;s connect to our root container and set the priority waiting parameters : <\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n[oracle@localhost ~]$ sqlplus \/ as sysdba\n\n\n\nSQL&gt; alter system set \"txn_auto_rollback_high_priority_wait_target\"=300;\n\nSystem altered.\n\nSQL&gt; alter system set \"txn_auto_rollback_medium_priority_wait_target\"=300;\n\nSystem altered.\n\nSQL&gt; select name,value from v$parameter where name like '%txn_priority%';\n\nNAME                                                         VALUE\n------------------------------------------------------------ ------------------------------------------------------------\ntxn_priority                                                 HIGH\ntxn_auto_rollback_high_priority_wait_target                  300\ntxn_auto_rollback_medium_priority_wait_target                300\n\n<\/pre>\n<p>The session priority is at HIGH because it is the default, and we have not changed it.<br \/>\nNow let&#8217;s connect to our pluggable database and verify our values : <\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nSQL&gt; alter session set container=DEVPDB;\n\nSession altered.\n\nSQL&gt; select name,value from v$parameter where name like '%txn_priority%';\n\nNAME                                                         VALUE\n------------------------------------------------------------ ------------------------------------------------------------\ntxn_priority                                                 HIGH\ntxn_auto_rollback_high_priority_wait_target                  2147483647\ntxn_auto_rollback_medium_priority_wait_target                2147483647\n<\/pre>\n<p>The waiting values are different, because it is a pluggable level defined value, 2147483647 seconds is the default. let&#8217;s set it at 4 minutes :<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n\nSQL&gt; alter system set \"txn_auto_rollback_high_priority_wait_target\"=160;\n\nSystem altered.\n\nSQL&gt; alter system set \"txn_auto_rollback_medium_priority_wait_target\"=160;\n\nSystem altered.\n\nSQL&gt; select name,value from v$parameter where name like '%txn_priority%';\n\nNAME                                                         VALUE\n------------------------------------------------------------ ------------------------------------------------------------\ntxn_priority                                                 HIGH\ntxn_auto_rollback_high_priority_wait_target                  160\ntxn_auto_rollback_medium_priority_wait_target                160\n\n<\/pre>\n<p>Now let&#8217;s set our current session at LOW priority and then make an update query without doing a commit or rollback :<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n-- Session 1 : Low priority\nSQL&gt; alter session set \"txn_priority\"=\"LOW\";\n\nSQL&gt; select name,value from v$parameter where name like '%txn_priority%';\n\nNAME                                                         VALUE\n------------------------------------------------------------ ------------------------------------------------------------\ntxn_priority                                                 LOW\ntxn_auto_rollback_high_priority_wait_target                  160\ntxn_auto_rollback_medium_priority_wait_target                160\n\nSQL&gt; update hr.EMPLOYEES set SALARY=10000 where EMPLOYEE_ID=102;\n\n1 row updated.\n\nSQL&gt;\n<\/pre>\n<p>Now let&#8217;s connect to a new session on the same pluggable database, and try to update the same row : <\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n-- Session 2 : High Priority\nSQL&gt; select name,value from v$parameter where name like '%txn_priority%';\n\nNAME                                                         VALUE\n------------------------------------------------------------ ------------------------------------------------------------\ntxn_priority                                                 HIGH\ntxn_auto_rollback_high_priority_wait_target                  160\ntxn_auto_rollback_medium_priority_wait_target                160\n\nSQL&gt; update hr.EMPLOYEES set SALARY=9000 where EMPLOYEE_ID=102;\n<\/pre>\n<p>=&gt; The prompt will not return as the session is waiting for session 1<br \/>\nBack in session 1, you can see the blocking information, please note the specific EVENT (row high priority)<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nSQL&gt; select sid,event,seconds_in_wait,blocking_session from v$session where event like '%enq%';\n\n       SID EVENT\n---------- ----------------------------------------------------------------\nSECONDS_IN_WAIT BLOCKING_SESSION\n--------------- ----------------\n        42 enq: TX - row (HIGH priority)\n            132              197\n<\/pre>\n<p>After 4 minutes the prompt in session 2 will return, the query in session 1 had been rollbacked.<br \/>\nif you try to do a commit in session 1, you will receive an ORA-03135 error (Connection lost contact)<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n-- session 1 \nSQL&gt; commit;\ncommit\n*\nERROR at line 1:\nORA-03135: connection lost contact\nProcess ID: 4905\nSession ID: 197 Serial number: 46817\nHelp : https:\/\/docs.oracle.com\/error-help\/db\/ora-03135\/\n\nSQL&gt;\n<\/pre>\n<p>Back in session 2, you can do your commit and check the value of the row : <\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n-- Session 2 \nSQL&gt; commit;\n\nCommit complete.\n\nSQL&gt; select SALARY from hr.EMPLOYEES where EMPLOYEE_ID=102;\n\n    SALARY\n----------\n      9000\n\n<\/pre>\n<p>For statistics about how many rollbacks did you have overall, you can query the v$sysstat view<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nSQL&gt; select * from v$sysstat where name like '%txns rollback%';\n\nSTATISTIC# NAME                                                                  CLASS      VALUE    STAT_ID     CON_ID\n---------- ---------------------------------------------------------------- ---------- ---------- ---------- ----------\n      1894 txns rollback priority_txns_high_wait_target                            384          5  312271427          3\n      1895 txns rollback priority_txns_medium_wait_target                          384          2 3671782541          3\n\nSQL&gt;\n\n<\/pre>\n<p>In this case, in our pluggable database (con_id=3) : <\/p>\n<p>&#8211; 2 times did a medium priority transaction caused the rollback of a low priority transaction.<br \/>\n&#8211; 5 times did a high priority transaction caused the rollback of either a medium or low priority transaction.<\/p>\n<p>If you have set you feature&#8217;s mode as &#8220;TRACK&#8221; instead of &#8220;ROLLBACK&#8221;, then you should search statistics that are like &#8216;%txns track%&#8217; instead :<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nSQL&gt; select * from v$sysstat where name like '%txns track%';\n\nSTATISTIC# NAME                                                                  CLASS      VALUE    STAT_ID     CON_ID\n---------- ---------------------------------------------------------------- ---------- ---------- ---------- ----------\n      1896 txns track mode priority_txns_high_wait_target                          384          0 2659394049          3\n      1897 txns track mode priority_txns_medium_wait_target                        384          0 1855585812          3\n<\/pre>\n<p>In this case, no occurrences because I did not used it. As mentioned before, this mode (TRACK) could be a great way to test &#8220;What would happen&#8221; if you implement the feature without causing any rollbacks.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Oracle Database 23ai Enterprise Edition, it is now possible to automatically rollback some transactions, and a set of new parameters have been added to control this behavior. Of course implementing this feature requires deep understanding of your application, data model and source code. The general idea : * We don&#8217;t want critical transactions [&hellip;]<\/p>\n","protected":false},"author":136,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59],"tags":[],"type_dbi":[],"class_list":["post-34194","post","type-post","status-publish","format-standard","hentry","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>Automatic Transaction Rollback in Oracle Database 23ai - dbi Blog<\/title>\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\/automatic-transaction-rollback-in-oracle-database-23ai\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatic Transaction Rollback in Oracle Database 23ai\" \/>\n<meta property=\"og:description\" content=\"In the Oracle Database 23ai Enterprise Edition, it is now possible to automatically rollback some transactions, and a set of new parameters have been added to control this behavior. Of course implementing this feature requires deep understanding of your application, data model and source code. The general idea : * We don&#8217;t want critical transactions [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-31T15:30:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-31T15:30:20+00:00\" \/>\n<meta name=\"author\" content=\"Abdessamed El Ahmar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abdessamed El Ahmar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 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\/automatic-transaction-rollback-in-oracle-database-23ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/\"},\"author\":{\"name\":\"Abdessamed El Ahmar\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d\"},\"headline\":\"Automatic Transaction Rollback in Oracle Database 23ai\",\"datePublished\":\"2024-07-31T15:30:18+00:00\",\"dateModified\":\"2024-07-31T15:30:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/\"},\"wordCount\":808,\"commentCount\":0,\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/\",\"name\":\"Automatic Transaction Rollback in Oracle Database 23ai - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2024-07-31T15:30:18+00:00\",\"dateModified\":\"2024-07-31T15:30:20+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automatic Transaction Rollback in Oracle Database 23ai\"}]},{\"@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\/c7be6ff9bc9dd6391b89fd662430836d\",\"name\":\"Abdessamed El Ahmar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g\",\"caption\":\"Abdessamed El Ahmar\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/abdessamedelahmar\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatic Transaction Rollback in Oracle Database 23ai - dbi Blog","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\/automatic-transaction-rollback-in-oracle-database-23ai\/","og_locale":"en_US","og_type":"article","og_title":"Automatic Transaction Rollback in Oracle Database 23ai","og_description":"In the Oracle Database 23ai Enterprise Edition, it is now possible to automatically rollback some transactions, and a set of new parameters have been added to control this behavior. Of course implementing this feature requires deep understanding of your application, data model and source code. The general idea : * We don&#8217;t want critical transactions [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/","og_site_name":"dbi Blog","article_published_time":"2024-07-31T15:30:18+00:00","article_modified_time":"2024-07-31T15:30:20+00:00","author":"Abdessamed El Ahmar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Abdessamed El Ahmar","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/"},"author":{"name":"Abdessamed El Ahmar","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d"},"headline":"Automatic Transaction Rollback in Oracle Database 23ai","datePublished":"2024-07-31T15:30:18+00:00","dateModified":"2024-07-31T15:30:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/"},"wordCount":808,"commentCount":0,"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/","url":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/","name":"Automatic Transaction Rollback in Oracle Database 23ai - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-07-31T15:30:18+00:00","dateModified":"2024-07-31T15:30:20+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/automatic-transaction-rollback-in-oracle-database-23ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automatic Transaction Rollback in Oracle Database 23ai"}]},{"@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\/c7be6ff9bc9dd6391b89fd662430836d","name":"Abdessamed El Ahmar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g","caption":"Abdessamed El Ahmar"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/abdessamedelahmar\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/34194","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\/136"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=34194"}],"version-history":[{"count":41,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/34194\/revisions"}],"predecessor-version":[{"id":34485,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/34194\/revisions\/34485"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=34194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=34194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=34194"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=34194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}