{"id":10267,"date":"2017-06-19T20:58:37","date_gmt":"2017-06-19T18:58:37","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/"},"modified":"2017-06-19T20:58:37","modified_gmt":"2017-06-19T18:58:37","slug":"12cr2-application-containers-and-foreign-keys","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/","title":{"rendered":"12cR2 Application Containers and Foreign Keys"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nApplication Container brings a new way to share data among databases, and adds a new dimension to referential integrity. A foreign key in an application PDB can reference a row belonging to a root data link table. But then, should a delete on the root validate that there are no orpheans in the application PDBs? And what if those PDBs are closed at the time of this delete? Here is a small example.<br \/>\n<!--more--><br \/>\nIf you run this in 12.2.0.1 you will get an error because the search for parent key is done only on the current container. This is considered as a bug: 21955394: CDB:ORA-02291 WHEN FOREIGN KEY REFERS TO THE PRIMARY KEY IN DATA LINK<\/p>\n<p>The example that follows is run with the <a href=\"https:\/\/updates.oracle.com\/download\/21955394.html\" target=\"_blank\" rel=\"noopener noreferrer\">patch<\/a> applied to fix this bug.<\/p>\n<p>I&#8217;m connecting to root where I have no user PDB yet.<\/p>\n<pre><code>\nSQL&gt; connect sys\/oracle@\/\/localhost\/CDB1A as sysdba\nConnected.\n&nbsp;\nSQL&gt; select con_id, name, application_root application_root, application_pdb application_pdb,application_root_con_id application_root_con_id from v$containers;\n&nbsp;\nCON_ID  NAME      APPLICATION_ROOT  APPLICATION_PDB  APPLICATION_ROOT_CON_ID\n------  ----      ----------------  ---------------  -----------------------\n1       CDB$ROOT  NO                NO\n2       PDB$SEED  NO                NO\n<\/code><\/pre>\n<p>I create the application container root<\/p>\n<pre><code>\nSQL&gt; create pluggable database SCOTT_ROOT as application container admin user SCOTT_ADMIN identified by oracle roles=(DBA);\nPluggable database SCOTT_ROOT created.\n&nbsp;\nSQL&gt; alter pluggable database SCOTT_ROOT open;\nPluggable database SCOTT_ROOT altered.\n&nbsp;\nSQL&gt; select con_id, name, application_root application_root, application_pdb application_pdb,application_root_con_id application_root_con_id from v$containers;\n&nbsp;\nCON_ID  NAME        APPLICATION_ROOT  APPLICATION_PDB  APPLICATION_ROOT_CON_ID\n------  ----        ----------------  ---------------  -----------------------\n1       CDB$ROOT    NO                NO\n2       PDB$SEED    NO                NO\n<\/code><\/pre>\n<p>I connect to this application root and start the installation of the application<\/p>\n<pre><code>\nSQL&gt; connect sys\/oracle@\/\/localhost\/SCOTT_ROOT as sysdba\nConnected.\n&nbsp;\nSQL&gt; alter pluggable database application SCOTT begin install '1.0';\nPluggable database APPLICATION altered.\n<\/code><\/pre>\n<p>I&#8217;m installing SCOTT tables DEPT and EMP tables but I changed their definition from utlsampl.sql:<\/p>\n<ul>\n<li>DEPT is an EXTENDED DATA LINK where a set of row is common, inserted on application root and visible by all application PDBs<\/li>\n<li>EMP is a METADATA LINK where each application PDB has its own data isolated from others, but having the same structure<\/li>\n<\/ul>\n<pre><code>\nSQL&gt; GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY tiger container=all;\nGrant succeeded.\n&nbsp;\nSQL&gt; alter session set current_schema=SCOTT;\nSession altered.\n&nbsp;\nSQL&gt; CREATE TABLE DEPT sharing=extended data\n  2         (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,\n  3     DNAME VARCHAR2(14) ,\n  4     LOC VARCHAR2(13) ) ;\nTable DEPT created.\n&nbsp;\nSQL&gt; CREATE TABLE EMP sharing=metadata\n  2         (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,\n  3     ENAME VARCHAR2(10),\n  4     JOB VARCHAR2(9),\n  5     MGR NUMBER(4),\n  6     HIREDATE DATE,\n  7     SAL NUMBER(7,2),\n  8     COMM NUMBER(7,2),\n  9     DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);\nTable EMP created.\n&nbsp;\nSQL&gt; INSERT INTO DEPT VALUES\n  2     (10,'ACCOUNTING','NEW YORK');\n1 row inserted.\n&nbsp;\nSQL&gt; INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');\n1 row inserted.\n&nbsp;\nSQL&gt; INSERT INTO DEPT VALUES\n  2     (30,'SALES','CHICAGO');\n1 row inserted.\n&nbsp;\nSQL&gt; INSERT INTO DEPT VALUES\n  2     (40,'OPERATIONS','BOSTON');\n1 row inserted.\n&nbsp;\nSQL&gt; COMMIT;\nCommit complete.\n&nbsp;\nSQL&gt; alter pluggable database application SCOTT end   install '1.0';\nPluggable database APPLICATION altered.\n<\/code><\/pre>\n<p>The application root has departments 10, 20, 30 and 40 in DEPT shared with all PDBs and has defined that EMP has a foreign key to it.<\/p>\n<p>I create an application PDB from this application root<\/p>\n<pre><code>\nSQL&gt; create pluggable database SCOTT_ONE admin user SCOTT_ONE_ADMIN identified by covfefe;\nPluggable database SCOTT_ONE created.\n&nbsp;\nSQL&gt; alter pluggable database SCOTT_ONE open;\nPluggable database SCOTT_ONE altered.\n<\/code><\/pre>\n<p>I sync it to get common DDL and DML applied<\/p>\n<pre><code>\nSQL&gt; connect sys\/oracle@\/\/localhost\/SCOTT_ONE as sysdba\nConnected.\n&nbsp;\nSQL&gt; alter pluggable database application SCOTT sync;\nPluggable database APPLICATION altered.\n&nbsp;\nSQL&gt; select name,con_id,application_pdb,application_root_con_id from v$containers;\n&nbsp;\nNAME       CON_ID  APPLICATION_PDB  APPLICATION_ROOT_CON_ID\n----       ------  ---------------  -----------------------\nSCOTT_ONE  8       YES              6\n<\/code><\/pre>\n<p>Now let&#8217;s connect to the application PDB. I can see the DEPT rows inserted from root because it is a DATA LINK.<\/p>\n<pre><code>\nSQL&gt; connect scott\/tiger@\/\/localhost\/SCOTT_ONE\nConnected.\n&nbsp;\nSQL&gt; select * from dept;\n&nbsp;\nDEPTNO  DNAME       LOC\n------  -----       ---\n10      ACCOUNTING  NEW YORK\n20      RESEARCH    DALLAS\n30      SALES       CHICAGO\n40      OPERATIONS  BOSTON\n<\/code><\/pre>\n<p>EMP is empty here<\/p>\n<pre><code>\nSQL&gt; select * from emp;\n&nbsp;\nno rows selected\n<\/code><\/pre>\n<p>I insert an EMP row in the application PDB which references a DEPT row in the application root:<\/p>\n<pre><code>\nSQL&gt; INSERT INTO EMP VALUES\n  2  (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);\n&nbsp;\n1 row inserted.\n<\/code><\/pre>\n<p>As DEPT is and EXTENDED DATA LINK, I can add new rows in my PDB:<\/p>\n<pre><code>\nSQL&gt; INSERT INTO DEPT VALUES\n  2     (50,'MY LOCAL DEPT','LAUSANNE');\n&nbsp;\n1 row inserted.\n<\/code><\/pre>\n<p>And I can have an EMP row referencing this local parent:<\/p>\n<pre><code>\nSQL&gt; INSERT INTO EMP VALUES\n  2  (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,50);\n1 row inserted.\n&nbsp;\nSQL&gt; commit;\nCommit complete.\n<\/code><\/pre>\n<p>This looks good. Now what happens of we delete all rows from DEPT in the application root?<\/p>\n<pre><code>\nSQL&gt; connect sys\/oracle@\/\/localhost\/SCOTT_ROOT as sysdba\nConnected.\nSQL&gt; delete from SCOTT.DEPT;\n4 rows deleted.\n&nbsp;\nSQL&gt; commit;\nCommit complete.\n<\/code><\/pre>\n<p>No error here. But then, I have orphans in my application PDB:<\/p>\n<pre><code>\nSQL&gt; connect scott\/tiger@\/\/localhost\/SCOTT_ONE\nConnected.\nSQL&gt; select * from dept;\n&nbsp;\n    DEPTNO DNAME          LOC\n---------- -------------- -------------\n        50 MY LOCAL DEPT  LAUSANNE\n&nbsp;\nSQL&gt; select * from emp;\n&nbsp;\n     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO\n---------- ---------- --------- ---------- --------- ---------- ---------- ----------\n      7369 SMITH      CLERK           7902 17-DEC-80        800                    20\n      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         50\n<\/code><\/pre>\n<h3>So what?<\/h3>\n<p>Referential integrity works across containers: an application PDB can reference parent key in the application root (according that bug is fixed). However, no ORA-02292 (child record found) is raised when child records are not in the current container. This one makes sense. Enforcing the verification of child records in all PDBs would require that they are opened, and may require locking the table in all containers. We must be aware that doing DML on the application root can lead to inconsistency if not done correctly. <\/p>\n<p>Operations on the application root are application releases (upgrades and patches) and must be validated and tested carefully. For the example above, deleting all rows from DEPT can be done as an application patch which deletes from the EMP table as well:<\/p>\n<pre><code>\nSQL&gt; connect sys\/oracle@\/\/localhost\/SCOTT_ROOT as sysdba\nConnected.\nSQL&gt; alter pluggable database application SCOTT begin patch 1 ;\nPluggable database APPLICATION altered.\nSQL&gt; delete from scott.emp;\n0 rows deleted.\nSQL&gt; delete from scott.dept where deptno in (10,20,30,40);\n4 rows deleted.\nSQL&gt; alter pluggable database application SCOTT end patch 1 ;\nPluggable database APPLICATION altered.\n<\/code><\/pre>\n<p>The delete from EMP does nothing in the application root here, but it will be done on the PDB when applying the patch:<\/p>\n<pre><code>\nSQL&gt; select * from dept;\n&nbsp;\n    DEPTNO DNAME          LOC\n---------- -------------- -------------\n        50 MY LOCAL DEPT  LAUSANNE\n&nbsp;\nSQL&gt; select * from emp;\n&nbsp;\n     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO\n---------- ---------- --------- ---------- --------- ---------- ---------- ----------\n      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         50\n<\/code><\/pre>\n<p>Note that I&#8217;ve defined exactly which rows from DEPT I wanted to delete in the where clause of <\/p>\n<pre><code>delete from scott.dept where deptno in (10,20,30,40);<\/code><\/pre>\n<p>You may be tempted to do something like: <\/p>\n<pre><code>delete from scott.dept where deptno in (select deptno from scott.dept);<\/code><\/pre>\n<p>But keep in mind that the statements you run in the root are re-played as-is in the PDBs. And when you sync the PDB, you can see no rows from DEPT because there were already purged from the root. Actually, what you want is to delete from EMP the rows which refer to the rows you have deleted from the root. It is not possible to get them with a subquery, except if you have stored them into another data link table before deleting them. Changes in the application root must be managed like application patches.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . Application Container brings a new way to share data among databases, and adds a new dimension to referential integrity. A foreign key in an application PDB can reference a row belonging to a root data link table. But then, should a delete on the root validate that there are no orpheans [&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":[198,59],"tags":[656,1123,64,209],"type_dbi":[],"class_list":["post-10267","post","type-post","status-publish","format-standard","hentry","category-database-management","category-oracle","tag-12-2","tag-application-container","tag-multitenant","tag-oracle-12c"],"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>12cR2 Application Containers and Foreign Keys - 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\/12cr2-application-containers-and-foreign-keys\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"12cR2 Application Containers and Foreign Keys\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . Application Container brings a new way to share data among databases, and adds a new dimension to referential integrity. A foreign key in an application PDB can reference a row belonging to a root data link table. But then, should a delete on the root validate that there are no orpheans [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-19T18:58:37+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=\"7 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\/12cr2-application-containers-and-foreign-keys\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"12cR2 Application Containers and Foreign Keys\",\"datePublished\":\"2017-06-19T18:58:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/\"},\"wordCount\":647,\"commentCount\":0,\"keywords\":[\"12.2\",\"Application Container\",\"multitenant\",\"Oracle 12c\"],\"articleSection\":[\"Database management\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/\",\"name\":\"12cR2 Application Containers and Foreign Keys - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2017-06-19T18:58:37+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"12cR2 Application Containers and Foreign Keys\"}]},{\"@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":"12cR2 Application Containers and Foreign Keys - 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\/12cr2-application-containers-and-foreign-keys\/","og_locale":"en_US","og_type":"article","og_title":"12cR2 Application Containers and Foreign Keys","og_description":"By Franck Pachot . Application Container brings a new way to share data among databases, and adds a new dimension to referential integrity. A foreign key in an application PDB can reference a row belonging to a root data link table. But then, should a delete on the root validate that there are no orpheans [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/","og_site_name":"dbi Blog","article_published_time":"2017-06-19T18:58:37+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"12cR2 Application Containers and Foreign Keys","datePublished":"2017-06-19T18:58:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/"},"wordCount":647,"commentCount":0,"keywords":["12.2","Application Container","multitenant","Oracle 12c"],"articleSection":["Database management","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/","url":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/","name":"12cR2 Application Containers and Foreign Keys - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2017-06-19T18:58:37+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/12cr2-application-containers-and-foreign-keys\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"12cR2 Application Containers and Foreign Keys"}]},{"@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\/10267","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=10267"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10267\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=10267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=10267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=10267"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=10267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}