{"id":3956,"date":"2014-10-24T07:31:04","date_gmt":"2014-10-24T05:31:04","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/"},"modified":"2014-10-24T07:31:04","modified_gmt":"2014-10-24T05:31:04","slug":"from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/","title":{"rendered":"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nDo you know why Oracle Database is a leader in the database market since 30 years? Do you know any other software that is still the leading solution after decades? I think that it is because Oracle has been a good software from the get-go. Many early decisions in the software architecture have revealed themselves later to be the right decision. Several decisions, such as the C language that made it portable to all platforms that were relevant during those 30 years, or the parallel server that has brought RAC when standalone servers were not able to scale anymore. Here, I will illustrate a decision made 15 years ago that has made the whole 12c pluggable databases stuff possible.<\/p>\n<h3>Oracle 7 rowid<\/h3>\n<p>The ROWID is the physical address of a row in the database. Physically, a database is just a set of files where data is stored as rows in blocks. So, at the time of Oracle 7, the ROWID was just:<\/p>\n<ul>\n<li>the file number<\/li>\n<li>the block number in that file<\/li>\n<li>the row number in that block<\/li>\n<\/ul>\n<div>That was printed in hexadecimal when we selected the ROWID pseudo-column:<\/div>\n<div><\/div>\n<p><a class=\"easyblog-thumb-preview\" title=\"CaptureOracle7Rowid.PNG\" href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\"><img decoding=\"async\" title=\"CaptureOracle7Rowid.PNG\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\" alt=\"CaptureOracle7Rowid.PNG\" \/><\/a><\/p>\n<p>Here my rows are numeroted from 0 to 3 and are all in the file 2 at block offset 58 (0x3a)<br \/>\nAt that time, the maximum number of datafiles in a database was 1022. That was enough until the datawarehouse days brought the need for Very Large DataBases.<\/p>\n<h3>Relative file number<\/h3>\n<p>In Oracle 8 they wanted to increase the possible number of datafile without changing the rowid (which would have involved updating all blocks during an upgrade). And here is how they did:<\/p>\n<p>1. they introduced the &#8216;relative file number&#8217;. The file identification part is not unique for the database but only for the tablespace. That means that you can have 1022 datafiles per tablespace instead of 1022 datafiles per database.<br \/>\n2. they kept the relative_fno equal to the absolute file_id for the first 1022 datafiles, so that an Oracle 7 datafile is still compatible: the number that was the absolute file_id being now the relative_fno.<br \/>\n3. when going over the 1022 datafiles per database, the file_id can go beyond (it is not stored in the rowid) but the relative_fno just recycles to 1.<\/p>\n<p>The consequence is that a rowid is not unique anymore. When we have to look for a row by its rowid, we must know on which tablespace it is, because the rowid identification is related to the tablespace.<\/p>\n<p>No problem. Where are the rowid used? In chained rows, to get the other piece. A table cannot store parts of its row in different tablespace, so we know that if we are in tablespace USERS and have a pointer to a chained row, it has to be in the USER tablespace as well. They are used in indexes as well. And that&#8217;s the same: if we unique scan the index EMP_PK to get the rowid of the EMP row, we know that it is in the USERS tablespace because we know that EMP table is in the USERS tablespace.<\/p>\n<p>However, a new feature appeared at that time: a table can be partitioned. We cannot say anymore that EMP rows are in USERS tablespace because EMP may be partitioned over several tablespaces. That does not concern chained rows. That does not concern non-partitioned tables. And with partitioned tables, that does not concern local indexes because local index partitions always address rows in one table partition.<\/p>\n<p>This is where Oracle has introduced an extended rowid, for global indexes on partitioned tables, which is larger and is able to give the tablespace information in addition to the relative file number. It is called extended as opposite to &#8216;restricted&#8217; rowid which is restricted to cases where we know the tablespace.<\/p>\n<p>They could have choosen to store only the tablespace number. But they choose to store the object id instead, which &#8211; from the dictionary &#8211; can be used to know the tablespace. People were puzzled by that choice at that time, but it has been revealed later as a great software architecture decision because this is what allows us to have pluggable databases 15 years later.<\/p>\n<p>But before that, I have to introduce another 8.0 change, which is the data object id.<\/p>\n<h3>Data object id<\/h3>\n<p>In Oracle 7, there is only one object_id. Because there is a one-to-one relation between the logical object (table) and the physical object (segment). That has changed with the introduction of partitioning, where one table may have several partitions.<\/p>\n<p>Partitions are also logical objects, and each of them has a unique object_id. But once again, the software architects made a very good decision by separating the identification of the physical object: they introduced the data_object_id. When you create a table, the data_object_id of the segment is equal to the object_id of the table. But that can change.<\/p>\n<p>For example, what happens when you truncate a table? You just reset the high water mark without going to all the blocks. And you can insert new rows that may go into the same place. But how are you sure that concurrent users will not mix old blocks with new ones ? Remember that the reader do not lock anything, so they didn&#8217;t notice your truncate. The truncate changes the data object_id as if it were a new segment, but still related to the same logical table.<\/p>\n<p>And with partitioning you can exchange partition: the logical object_id changes but the physical data_object_id is still the same because it is still the same segment.<\/p>\n<p>It&#8217;s not always easy to know if we are dealing with an object_id or a data_object_id. Basically, things that are logical (for example lock table or lock partition) show the object_id and they are &#8211; depending on the place &#8211; called OBJECT_ID, OBJ# or OBJN. When it is related to the physical segment (blocks in buffer cache, block corruption) we see DATA_OBJECT_ID, DATAOBJ# or OBJD or even OBJ or OBJECT_NUMBER.<\/p>\n<p>When I&#8217;m not sure about what to use in my scripts, I test it on a table that has been truncated at least once, so that both values are different. I advise you to always test your scripts on a table that has been truncated and on a tablespace that has been transported.<\/p>\n<h3>Oracle 8 extended rowid<\/h3>\n<p>So I said that the extended rowid does not store the tablespace id. It stores the data_object_id, which is associated with one and only one tablespace. The format of the extended rowid is:<\/p>\n<ul>\n<li>the data object id (which gives the tablespace from the data dictionary)<\/li>\n<li>the relative file number (relative to the tablespace)<\/li>\n<li>the block number in that file<\/li>\n<li>the row number in that block<\/li>\n<\/ul>\n<p>and it is needed only when we don&#8217;t navigate from an object which can be used to define exactly which tablespace can contain the segment.<\/p>\n<p>Now let&#8217;s understand why the Oracle software architects have decided to store the data_object_id instead of the tablespace number. By doing that, they made the tablespaces physically independant of the database.<\/p>\n<h3>Pluggable tablespaces<\/h3>\n<p>Yes, I know it&#8217;s called transportable tablespaces. But it was the premise of pluggable database. Anyway, pluggable databases are just transportable tablespaces that include the system tablespace (which contain the metadata for the other tablespaces).<\/p>\n<p>You can transport a tablespace from another database and plug it in you database. Of course, the absolute file number will change as it is assigned by your database. The tablespace number will change. But the relative file numbers &#8211; relative to the tablespace &#8211; do not have to change.<\/p>\n<p>And of course the object_id will change: a new one will be used when importing the metadata. But the data_object_id do not have to change. The reason is that data_object_id is not expected to be unique in the database. It must be unique only whithin the object (two partitions of the same table cannot have the same data_object_id).<\/p>\n<h3>Oracle 8 extended rowid was designed for pluggable databases<\/h3>\n<p>And this is where those early decisions have all their meaning. You can plug a tablespace and the rowid of the rows in that tablespace do not have to be updated. This is what makes it a quick operation because only the dictionary and the file headers have to be updated. The time depends on the number of objects, but not on the volume of data. The agility brought by pluggable databases in 2013 were actually designed in 1997.<\/p>\n<h3>rowid is not unique<\/h3>\n<p>So I said that rowid is not unique? Let&#8217;s prove it. I create a table DEMO2 in tablespace DEMO1, export that tablespace, rename the table to DEMO2 to DEMO1, import that tablespace as DEMO2, so that I have now two tables DEMO1 and DEMO2 respectively in tablespaces DEMO1 and DEMO1.<\/p>\n<p>Here is my table:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select dname,rowid\n  2   ,dbms_rowid.rowid_object(rowid) data_object_id\n  3   ,dbms_rowid.rowid_relative_fno(rowid) relative_fno\n  4   ,dbms_rowid.rowid_block_number(rowid) block_id\n  5   ,dbms_rowid.rowid_row_number(rowid) row_number\n  6   from DEMO2\n  7  \/\n\nDNAME          ROWID              DATA_OBJECT_ID RELATIVE_FNO   BLOCK_ID ROW_NUMBER\n-------------- ------------------ -------------- ------------ ---------- ----------\nACCOUNTING     AAAX7uAACAAAACEAAA          98030            2        132          0\nRESEARCH       AAAX7uAACAAAACEAAB          98030            2        132          1\nSALES          AAAX7uAACAAAACEAAC          98030            2        132          2\nOPERATIONS     AAAX7uAACAAAACEAAD          98030            2        132          3\n<\/pre>\n<p>I export the tablespace with transportable tablespaces:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; host expdp '\"\/ as sysdba\"' transport_tablespaces=DEMO1\nExport: Release 12.1.0.2.0 - Production on Fri Oct 24 15:33:35 2014\nCopyright (c) 1982, 2014, Oracle and\/or its affiliates.  All rights reserved.\nConnected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production\nWith the Partitioning, OLAP, Advanced Analytics and Real Application Testing options\nStarting \"SYS\".\"SYS_EXPORT_TRANSPORTABLE_01\":  \"\/******** AS SYSDBA\" transport_tablespaces=DEMO1\nProcessing object type TRANSPORTABLE_EXPORT\/PLUGTS_BLK\nProcessing object type TRANSPORTABLE_EXPORT\/TABLE\nProcessing object type TRANSPORTABLE_EXPORT\/TABLE_STATISTICS\nProcessing object type TRANSPORTABLE_EXPORT\/STATISTICS\/MARKER\nProcessing object type TRANSPORTABLE_EXPORT\/POST_INSTANCE\/PLUGTS_BLK\nMaster table \"SYS\".\"SYS_EXPORT_TRANSPORTABLE_01\" successfully loaded\/unloaded\n******************************************************************************\nDump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:\n  \/u02\/app\/oracle\/admin\/DEMO\/dpdump\/expdat.dmp\n******************************************************************************\nDatafiles required for transportable tablespace DEMO1:\n  \/tmp\/demo1.dbf\nJob \"SYS\".\"SYS_EXPORT_TRANSPORTABLE_01\" successfully completed at Fri Oct 24 15:34:35 2014 elapsed 0 00:00:59\nSQL&gt; host cp '\/tmp\/demo1.dbf' '\/tmp\/demo2.dbf'\nSQL&gt; alter tablespace DEMO1 read write;\nTablespace altered.\n<\/pre>\n<p>Then import it to DEMO2 tablespace (after renaming my previous table)<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; rename DEMO2 to DEMO1;\nSQL&gt; host impdp '\"\/ as sysdba\"' transport_datafiles='\/tmp\/demo2.dbf ' remap_tablespace='DEMO1:DEMO2';\nImport: Release 12.1.0.2.0 - Production on Fri Oct 24 15:34:35 2014\n\nCopyright (c) 1982, 2014, Oracle and\/or its affiliates.  All rights reserved.\n\nConnected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production\nWith the Partitioning, OLAP, Advanced Analytics and Real Application Testing options\nMaster table \"SYS\".\"SYS_IMPORT_TRANSPORTABLE_01\" successfully loaded\/unloaded\nStarting \"SYS\".\"SYS_IMPORT_TRANSPORTABLE_01\":  \"\/******** AS SYSDBA\" transport_datafiles=\/tmp\/demo2.dbf  remap_tablespace=DEMO1:DEMO2\nProcessing object type TRANSPORTABLE_EXPORT\/PLUGTS_BLK\nProcessing object type TRANSPORTABLE_EXPORT\/TABLE\nProcessing object type TRANSPORTABLE_EXPORT\/TABLE_STATISTICS\nProcessing object type TRANSPORTABLE_EXPORT\/STATISTICS\/MARKER\nProcessing object type TRANSPORTABLE_EXPORT\/POST_INSTANCE\/PLUGTS_BLK\nJob \"SYS\".\"SYS_IMPORT_TRANSPORTABLE_01\" successfully completed at Fri Oct 24 15:34:49 2014 elapsed 0 00:00:13\nSQL&gt; alter tablespace DEMO2 read write;\nTablespace altered.\n<\/pre>\n<p>Now I have 2 tables with different object_id but same data_object_id:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select object_name,object_id,data_object_id from user_objects where object_name like 'DEMO_';\n\nOBJECT_NAM  OBJECT_ID DATA_OBJECT_ID\n---------- ---------- --------------\nDEMO2           98076          98030\nDEMO1           98029          98030\n<\/pre>\n<p>And 2 segments in different files (file_id) but same relative_fno:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select segment_name,tablespace_name,file_id,relative_fno,block_id from dba_extents where segment_name like \n\nSEGMENT_NAME    TABLESPACE    FILE_ID RELATIVE_FNO   BLOCK_ID\n--------------- ---------- ---------- ------------ ----------\nDEMO1           DEMO1               2            2        128\nDEMO2           DEMO2               4            2        128\n<\/pre>\n<p>I update the rows so that I be sure to select on different tables<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; update DEMO1 set dname=upper(dname);\n4 rows updated.\nSQL&gt; update DEMO2 set dname=lower(dname);\n4 rows updated.\n<\/pre>\n<p>And now showing the ROWID from both tables:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select dname,rowid\n  2   ,dbms_rowid.rowid_object(rowid) data_object_id\n  3   ,dbms_rowid.rowid_relative_fno(rowid) relative_fno\n  4   ,dbms_rowid.rowid_block_number(rowid) block_id\n  5   ,dbms_rowid.rowid_row_number(rowid) row_number\n  6   from DEMO1\n  7  \/\n\nDNAME          ROWID              DATA_OBJECT_ID RELATIVE_FNO   BLOCK_ID ROW_NUMBER\n-------------- ------------------ -------------- ------------ ---------- ----------\nACCOUNTING     AAAX7uAACAAAACEAAA          98030            2        132          0\nRESEARCH       AAAX7uAACAAAACEAAB          98030            2        132          1\nSALES          AAAX7uAACAAAACEAAC          98030            2        132          2\nOPERATIONS     AAAX7uAACAAAACEAAD          98030            2        132          3\n\nSQL&gt; select dname,rowid\n  2   ,dbms_rowid.rowid_object(rowid) data_object_id\n  3   ,dbms_rowid.rowid_relative_fno(rowid) relative_fno\n  4   ,dbms_rowid.rowid_block_number(rowid) block_id\n  5   ,dbms_rowid.rowid_row_number(rowid) row_number\n  6   from DEMO2\n  7  \/\n\nDNAME          ROWID              DATA_OBJECT_ID RELATIVE_FNO   BLOCK_ID ROW_NUMBER\n-------------- ------------------ -------------- ------------ ---------- ----------\naccounting     AAAX7uAACAAAACEAAA          98030            2        132          0\nresearch       AAAX7uAACAAAACEAAB          98030            2        132          1\nsales          AAAX7uAACAAAACEAAC          98030            2        132          2\noperations     AAAX7uAACAAAACEAAD          98030            2        132          3\n<\/pre>\n<p>Conclusion: I have in my database two different tables with sames rowid because it is a physical copy. Only the data dictionary makes the difference.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . Do you know why Oracle Database is a leader in the database market since 30 years? Do you know any other software that is still the leading solution after decades? I think that it is because Oracle has been a good software from the get-go. Many early decisions in the software [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":3957,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[198,59],"tags":[96,33,209,353],"type_dbi":[],"class_list":["post-3956","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-management","category-oracle","tag-oracle","tag-oracle-10g-to-8i","tag-oracle-12c","tag-pluggable-database"],"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>From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software - dbi Blog<\/title>\n<meta name=\"description\" content=\"Showing how the Oracle 12c Pluggable Database released in 2013 was already designed 15 years ago in the Oracle DB 8.0 release.\" \/>\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\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software\" \/>\n<meta property=\"og:description\" content=\"Showing how the Oracle 12c Pluggable Database released in 2013 was already designed 15 years ago in the Oracle DB 8.0 release.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-10-24T05:31:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\" \/>\n\t<meta property=\"og:image:width\" content=\"461\" \/>\n\t<meta property=\"og:image:height\" content=\"199\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"11 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\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software\",\"datePublished\":\"2014-10-24T05:31:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\"},\"wordCount\":1587,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\",\"keywords\":[\"Oracle\",\"Oracle 10g to 8i\",\"Oracle 12c\",\"Pluggable Database\"],\"articleSection\":[\"Database management\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\",\"name\":\"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\",\"datePublished\":\"2014-10-24T05:31:04+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"Showing how the Oracle 12c Pluggable Database released in 2013 was already designed 15 years ago in the Oracle DB 8.0 release.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png\",\"width\":461,\"height\":199},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software\"}]},{\"@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":"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software - dbi Blog","description":"Showing how the Oracle 12c Pluggable Database released in 2013 was already designed 15 years ago in the Oracle DB 8.0 release.","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\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/","og_locale":"en_US","og_type":"article","og_title":"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software","og_description":"Showing how the Oracle 12c Pluggable Database released in 2013 was already designed 15 years ago in the Oracle DB 8.0 release.","og_url":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/","og_site_name":"dbi Blog","article_published_time":"2014-10-24T05:31:04+00:00","og_image":[{"width":461,"height":199,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png","type":"image\/png"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software","datePublished":"2014-10-24T05:31:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/"},"wordCount":1587,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png","keywords":["Oracle","Oracle 10g to 8i","Oracle 12c","Pluggable Database"],"articleSection":["Database management","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/","url":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/","name":"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png","datePublished":"2014-10-24T05:31:04+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"Showing how the Oracle 12c Pluggable Database released in 2013 was already designed 15 years ago in the Oracle DB 8.0 release.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/CaptureOracle7Rowid.png","width":461,"height":199},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/from-80-extended-rowid-to-12c-pluggable-db-or-why-oracle-database-is-still-a-great-software\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"From 8.0 extended rowid to 12c pluggable db: Why Oracle Database is still a great software"}]},{"@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\/3956","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=3956"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3956\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/3957"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=3956"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=3956"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=3956"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=3956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}