{"id":13935,"date":"2020-04-17T20:17:12","date_gmt":"2020-04-17T18:17:12","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/"},"modified":"2020-04-17T20:17:12","modified_gmt":"2020-04-17T18:17:12","slug":"find-the-sql-plan-baseline-for-a-plan-operation","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/","title":{"rendered":"Find the SQL Plan Baseline for a plan operation"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nIf you decide to capture SQL Plan Baselines, you achieve plan stability by being conservative: if the optimizer comes with a new execution plan, it is loaded into the SQL Plan Management base, but not accepted. One day, you may add an index to improve some queries. Then you should check if there is any SQL Plan Baseline for queries with the same access predicate. Because the optimizer will probably find this index attractive, and add the new plan in the SPM base, but it will not be used unless you evolve it to accept it. Or you may remove the SQL Plan Baseline for these queries now that you know you provided a very efficient access path.<\/p>\n<p>But how do you find all SQL Plan Baselines that are concerned? Here is an example.<\/p>\n<p>I start with the SCOTT schema where I capture the SQL Plan Baselines for the following queries:<\/p>\n<pre><code>\nset time on sqlprompt 'SQL&gt; '\nhost TWO_TASK=\/\/localhost\/CDB1A_PDB1.subnet.vcn.oraclevcn.com sqlplus sys\/\"demo##OracleDB20c\" as sysdba @ ?\/rdbms\/admin\/utlsampl.sql\nconnect scott\/tiger@\/\/localhost\/CDB1A_PDB1.subnet.vcn.oraclevcn.com\nalter session set optimizer_mode=first_rows optimizer_capture_sql_plan_baselines=true;\nselect * from emp where ename='SCOTT';\nselect * from emp where ename='SCOTT';\n<\/code><\/pre>\n<p>This is a full table scap because I have no index here.<br \/>\nNow I create an index that helps for this kind of queries:<\/p>\n<pre><code>\nalter session set optimizer_mode=first_rows optimizer_capture_sql_plan_baselines=false;\nhost sleep 1\ncreate index emp_ename on emp(ename);\nhost sleep 1\nselect * from emp where ename='SCOTT';\n<\/code><\/pre>\n<p>I have now, in addition to the accepted FULL TABLE SCAN baseline, the loaded, but not accepted, plan with INDEX access.<br \/>\nHere is the detail the list of plans:<\/p>\n<pre><code>\nSQL&gt; select sql_handle,plan_name,created,enabled ENA,accepted ACC,fixed FIX,origin from dba_sql_plan_baselines;\n\n             SQL_HANDLE                         PLAN_NAME            CREATED    ENA    ACC    FIX          ORIGIN\n_______________________ _________________________________ __________________ ______ ______ ______ _______________\nSQL_62193752b864a1e8    SQL_PLAN_6469raaw698g854d6b671    17-apr-20 19:37    YES    NO     NO     AUTO-CAPTURE\nSQL_62193752b864a1e8    SQL_PLAN_6469raaw698g8d8a279cc    17-apr-20 19:37    YES    YES    NO     AUTO-CAPTURE\n<\/code><\/pre>\n<p>Full table scan:<\/p>\n<pre><code>\nSQL&gt; select * from dbms_xplan.display_sql_plan_baseline('SQL_62193752b864a1e8','SQL_PLAN_6469raaw698g8d8a279cc'\n);\n\n                                                                  PLAN_TABLE_OUTPUT\n___________________________________________________________________________________\n\n--------------------------------------------------------------------------------\nSQL handle: SQL_62193752b864a1e8\nSQL text: select * from emp where ename='SCOTT'\n--------------------------------------------------------------------------------\n\n--------------------------------------------------------------------------------\nPlan name: SQL_PLAN_6469raaw698g8d8a279cc         Plan id: 3634526668\nEnabled: YES     Fixed: NO      Accepted: YES     Origin: AUTO-CAPTURE\nPlan rows: From dictionary\n--------------------------------------------------------------------------------\n\nPlan hash value: 3956160932\n\n--------------------------------------------------------------------------\n| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |\n--------------------------------------------------------------------------\n|   0 | SELECT STATEMENT  |      |     1 |    87 |     2   (0)| 00:00:01 |\n|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    87 |     2   (0)| 00:00:01 |\n--------------------------------------------------------------------------\n\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   1 - filter(\"ENAME\"='SCOTT')\n<\/code><\/pre>\n<p>Index access &#8211; not accepted<\/p>\n<pre><code>\nSQL&gt; select * from dbms_xplan.display_sql_plan_baseline('SQL_62193752b864a1e8','SQL_PLAN_6469raaw698g854d6b671'\n);\n\n                                                                                   PLAN_TABLE_OUTPUT\n____________________________________________________________________________________________________\n\n--------------------------------------------------------------------------------\nSQL handle: SQL_62193752b864a1e8\nSQL text: select * from emp where ename='SCOTT'\n--------------------------------------------------------------------------------\n\n--------------------------------------------------------------------------------\nPlan name: SQL_PLAN_6469raaw698g854d6b671         Plan id: 1423357553\nEnabled: YES     Fixed: NO      Accepted: NO      Origin: AUTO-CAPTURE\nPlan rows: From dictionary\n--------------------------------------------------------------------------------\n\nPlan hash value: 2855689319\n\n-------------------------------------------------------------------------------------------------\n| Id  | Operation                           | Name      | Rows  | Bytes | Cost (%CPU)| Time     |\n-------------------------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT                    |           |     1 |    87 |     2   (0)| 00:00:01 |\n|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| EMP       |     1 |    87 |     2   (0)| 00:00:01 |\n|*  2 |   INDEX RANGE SCAN                  | EMP_ENAME |     1 |       |     1   (0)| 00:00:01 |\n-------------------------------------------------------------------------------------------------\n\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   2 - access(\"ENAME\"='SCOTT')\n\n<\/code><\/pre>\n<h3>SQL Plan Baseline lookup by plan operation<\/h3>\n<p>Now, I want to know all queries in this case, where a SQL Plan Baseline references this index because I&#8217;ll probably want to delete all plans for this query, or maybe evolve the index access to be accepted.<br \/>\nHere is my query on sys.sqlobj$plan<\/p>\n<pre><code>\nselect sql_handle,plan_name,created,enabled ENA,accepted ACC,fixed FIX,origin\n ,operation,options,object_name\nfrom (\n -- SPM execution plans\n select signature,category,obj_type,plan_id\n ,operation, options, object_name\n from sys.sqlobj$plan\n) natural join (\n -- SQL Plan Baselines\n select signature,category,obj_type,plan_id\n ,name plan_name\n from sys.sqlobj$\n where obj_type=2\n) natural join (\n select plan_name\n ,sql_handle,created,enabled,accepted,fixed,origin\n from dba_sql_plan_baselines\n)\nwhere operation='INDEX' and object_name like 'EMP_ENAME'\n\/\n<\/code><\/pre>\n<p>This gets the signature and plan identification from sys.sqlobj$plan then joins to sys.sqlobj$ to get the plan name, and finally dba_sql_plan_baselines to get additional information:<\/p>\n<pre><code>\n             SQL_HANDLE                         PLAN_NAME            CREATED    ENA    ACC    FIX          ORIGIN    OPERATION       OPTIONS    OBJECT_NAME\n_______________________ _________________________________ __________________ ______ ______ ______ _______________ ____________ _____________ ______________\nSQL_62193752b864a1e8    SQL_PLAN_6469raaw698g854d6b671    17-apr-20 19:37    YES    NO     NO     AUTO-CAPTURE    INDEX        RANGE SCAN    EMP_ENAME\n<\/code><\/pre>\n<p>You can see that I like natural joins but be aware that I do that only when I fully control the columns by defining, in subqueries, the column projections before the join.<\/p>\n<p>I have the following variant if I want to lookup by the outline hints:<\/p>\n<pre><code>\nselect sql_handle,plan_name,created,enabled ENA,accepted ACC,fixed FIX,origin\n ,operation,options,object_name\n ,outline_data\nfrom (\n -- SPM execution plans\n select signature,category,obj_type,plan_id\n ,operation, options, object_name\n ,case when other_xml like '%outline_data%' then extract(xmltype(other_xml),'\/*\/outline_data').getStringVal() end outline_data\n from sys.sqlobj$plan\n) natural join (\n -- SQL Plan Baselines\n select signature,category,obj_type,plan_id\n ,name plan_name\n from sys.sqlobj$\n where obj_type=2\n) natural join (\n select plan_name\n ,sql_handle,created,enabled,accepted,fixed,origin\n from dba_sql_plan_baselines\n)\nwhere outline_data like '%INDEX%'\n\/\n<\/code><\/pre>\n<p>This is what we find on the OTHER_XML and it is faster to filter here rather than calling dbms_xplan for each:<\/p>\n<pre><code>\n             SQL_HANDLE                         PLAN_NAME            CREATED    ENA    ACC    FIX          ORIGIN       OPERATION                   OPTIONS    OBJECT_NAME                                                                                                                                                                                                                                                                                                                                                                                                                             OUTLINE_DATA\n_______________________ _________________________________ __________________ ______ ______ ______ _______________ _______________ _________________________ ______________ ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________\nSQL_62193752b864a1e8    SQL_PLAN_6469raaw698g854d6b671    17-apr-20 19:37    YES    NO     NO     AUTO-CAPTURE    TABLE ACCESS    BY INDEX ROWID BATCHED    EMP            &lt;outline_data&gt;&lt;hint&gt;&lt;![CDATA[BATCH_TABLE_ACCESS_BY_ROWID(@\"SEL$1\" \"EMP\"@\"SEL$1\")]]&gt;&lt;\/hint&gt;&lt;hint&gt;&lt;![CDATA[INDEX_RS_ASC(@\"SEL$1\" \"EMP\"@\"SEL$1\" (\"EMP\".\"ENAME\"))]]&gt;&lt;\/hint&gt;&lt;hint&gt;&lt;![CDATA[OUTLINE_LEAF(@\"SEL$1\")]]&gt;&lt;\/hint&gt;&lt;hint&gt;&lt;![CDATA[FIRST_ROWS]]&gt;&lt;\/hint&gt;&lt;hint&gt;&lt;![CDATA[DB_VERSION('20.1.0')]]&gt;&lt;\/hint&gt;&lt;hint&gt;&lt;![CDATA[OPTIMIZER_FEATURES_ENABLE('20.1.0')]]&gt;&lt;\/hint&gt;&lt;hint&gt;&lt;![CDATA[IGNORE_OPTIM_EMBEDDED_HINTS]]&gt;&lt;\/hint&gt;&lt;\/outline_data&gt;\n<\/code><\/pre>\n<p>Those SYS.SQLOBJ$ tables are the tables where Oracle stores the queries for the SQL Management Base (SQL Profiles, SQL Plan Baselines, SQL Patches, SQL Quarantine). <\/p>\n<p>If you want to find the SQL_ID from a SQL Plan Baseline, I have a query in a previous post:<br \/>\n<a href=\"https:\/\/medium.com\/@FranckPachot\/oracle-dba-sql-plan-baseline-sql-id-and-plan-hash-value-8ffa811a7c68\" rel=\"noopener noreferrer\" target=\"_blank\">https:\/\/medium.com\/@FranckPachot\/oracle-dba-sql-plan-baseline-sql-id-and-plan-hash-value-8ffa811a7c68<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . If you decide to capture SQL Plan Baselines, you achieve plan stability by being conservative: if the optimizer comes with a new execution plan, it is loaded into the SQL Plan Management base, but not accepted. One day, you may add an index to improve some queries. Then you should check [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59],"tags":[96,458,664,1899],"type_dbi":[],"class_list":["post-13935","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-oracle","tag-oracle-20c","tag-spm","tag-sql-plan-baseline"],"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>Find the SQL Plan Baseline for a plan operation - 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\/find-the-sql-plan-baseline-for-a-plan-operation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Find the SQL Plan Baseline for a plan operation\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . If you decide to capture SQL Plan Baselines, you achieve plan stability by being conservative: if the optimizer comes with a new execution plan, it is loaded into the SQL Plan Management base, but not accepted. One day, you may add an index to improve some queries. Then you should check [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-17T18:17:12+00:00\" \/>\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\/find-the-sql-plan-baseline-for-a-plan-operation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Find the SQL Plan Baseline for a plan operation\",\"datePublished\":\"2020-04-17T18:17:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/\"},\"wordCount\":433,\"commentCount\":0,\"keywords\":[\"Oracle\",\"Oracle 20c\",\"SPM\",\"SQL Plan Baseline\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/\",\"name\":\"Find the SQL Plan Baseline for a plan operation - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2020-04-17T18:17:12+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Find the SQL Plan Baseline for a plan operation\"}]},{\"@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":"Find the SQL Plan Baseline for a plan operation - 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\/find-the-sql-plan-baseline-for-a-plan-operation\/","og_locale":"en_US","og_type":"article","og_title":"Find the SQL Plan Baseline for a plan operation","og_description":"By Franck Pachot . If you decide to capture SQL Plan Baselines, you achieve plan stability by being conservative: if the optimizer comes with a new execution plan, it is loaded into the SQL Plan Management base, but not accepted. One day, you may add an index to improve some queries. Then you should check [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/","og_site_name":"dbi Blog","article_published_time":"2020-04-17T18:17:12+00:00","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\/find-the-sql-plan-baseline-for-a-plan-operation\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Find the SQL Plan Baseline for a plan operation","datePublished":"2020-04-17T18:17:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/"},"wordCount":433,"commentCount":0,"keywords":["Oracle","Oracle 20c","SPM","SQL Plan Baseline"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/","url":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/","name":"Find the SQL Plan Baseline for a plan operation - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2020-04-17T18:17:12+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/find-the-sql-plan-baseline-for-a-plan-operation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Find the SQL Plan Baseline for a plan operation"}]},{"@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\/13935","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=13935"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/13935\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=13935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=13935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=13935"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=13935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}