﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Bert Scalzo's Blog</title>
    <description>&lt;table&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;img height="183" alt="" width="139" src="/Portals/0/Blog/blog-bert-scalzo.png" /&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;Bert Scalzo is a product architect for Quest Software,&amp;#160;a member of the Toad team and an &lt;a href="http://www.oracle.com/technology/community/oracle_ace/index.html"&gt;Oracle ACE&lt;/a&gt;. He has worked with Oracle databases for over two decades; his key areas of interest are data modeling, database benchmarking, tuning and optimization, "Star Schema" data warehouses and Linux. Bert is the author of several books and has written articles for many online outlets and publications,&amp;#160;and has presented at numerous Oracle conferences and user groups.
            &lt;p&gt;Bert's blog provides useful Toad “how to” and “tips and tricks” covering topics on database admin and benchmarking.&lt;/p&gt;
            &lt;p&gt;&lt;font color="#003366" size="3"&gt;&lt;strong&gt;Recent postings:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;</description>
    <link>http://www.toadworld.com/BLOGS/tabid/67/BlogId/14/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>Bert Scalzo</managingEditor>
    <webMaster>webmaster@toadworld.com</webMaster>
    <pubDate>Thu, 18 Mar 2010 05:30:33 GMT</pubDate>
    <lastBuildDate>Thu, 18 Mar 2010 05:30:33 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.2.0.15477</generator>
    <item>
      <title>Oracle 11g Improves Partitioning</title>
      <description>&lt;font face="Tahoma"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Oracle 11g has a plethora of great new features. One area that has improved with each of the last four releases has been partitioning, i.e. the method to break larger tables into smaller, more manageable and efficient sub-tables. While it was originally touted as a boon for just the data warehousing world, partitioning nonetheless works well in many situations. With Oracle continuing to improve upon them – partitioning is now a powerful asset in any DBA’s tool belt. So let’s examine some of the new table partitioning techniques introduced with Oracle 11g.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;First, Oracle has nicely “rounded out” the composite partitioning alternatives by adding list-hash, list-list, list-range and range-range partitioning. These new methods are pretty straight forward for anyone who has already been using partitioning. However nice these new composite options may be – this was only an incremental or evolutionary change.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Second, Oracle has introduced “Interval Partitioning” – a very useful and powerful option for DBAs whose data is continuously growing over a range. Before 11g, the DBA had to keep ahead of the data growth curve by manually adding partitions for the new range of values. So for example if I was partitioning by week, I had to remember to manually add the next weeks partition before some application tried to insert values within that range. Otherwise you’d get the Oracle error ORA-14400: inserted partition key does not map to any partition. Here’s an example of that happening:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CREATE TABLE TABLE1&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;br /&gt;
 &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;C1&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;INTEGER&lt;span style="mso-spacerun: yes"&gt;                 &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;NOT NULL PRIMARY KEY,&lt;br /&gt;
 &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;C2&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL,&lt;br /&gt;
 &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;C3&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C4&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARTITION BY RANGE (C1)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;span style="mso-spacerun: yes"&gt;  &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P1 VALUES LESS THAN (100),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P2 VALUES LESS THAN (200),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P3 VALUES LESS THAN (300)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table1 values (100,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table1 values (101,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table1 values (200,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table1 values (201,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table1 values (300,'a','b','c');&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;ç&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt; this statement causes the error&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;You can sort of think of this like the old “unable to allocate extent” error message for tablespaces where the data file size was not allowed to automatically extend and, much like that extent allocation failure message, ORA-14400 should be a message that never should really occur (assuming the DBA is keeping current with their data growth needs).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;So here’s the same table implemented using interval partitioning.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CREATE TABLE TABLE2&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C1&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;INTEGER&lt;span style="mso-spacerun: yes"&gt;                 &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;           &lt;/span&gt;NOT NULL PRIMARY KEY,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C2&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C3&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C4&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARTITION BY RANGE (C1)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;INTERVAL (100)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;span style="mso-spacerun: yes"&gt;  &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P1 VALUES LESS THAN (100)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;);&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table2 values (100,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table2 values (101,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table2 values (200,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table2 values (201,'a','b','c');&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;insert into table2 values (300,'a','b','c');&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;We don’t get any errors with this implementation – even though we did not create but the first partition for values less than 100. In this case, Oracle simply creates the necessary partitions for you on the fly. Here’s what partitions the above two table examples yield:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE_NAME&lt;span style="mso-spacerun: yes"&gt;       &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION_NAME&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;HIGH_VALUE&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;-------------------------- &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;------------------------------ &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;-------------------&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE1&lt;span style="mso-spacerun: yes"&gt;                     &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;P1&lt;span style="mso-spacerun: yes"&gt;                             &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;100&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE1&lt;span style="mso-spacerun: yes"&gt;                 &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;P2&lt;span style="mso-spacerun: yes"&gt;                             &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;200&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE1&lt;span style="mso-spacerun: yes"&gt;                     &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;P3&lt;span style="mso-spacerun: yes"&gt;                             &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;300&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE2&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;P1&lt;span style="mso-spacerun: yes"&gt;                             &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;100&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE2&lt;span style="mso-spacerun: yes"&gt;                     &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;SYS_P41&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;200&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE2&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;SYS_P42&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;300&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE2&lt;span style="mso-spacerun: yes"&gt;                    &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;SYS_P43&lt;span style="mso-spacerun: yes"&gt;                          &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;400&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Third, Oracle has introduced “Reference Partitioning.” This technique is both novel and a little more complex. You must have a “parent-child relationship” between two tables with active primary and foreign keys between them. There are real benefits to this approach, namely that reference partitioning permits logically equi-partitioning the child table by inheriting the partition key from the parent table without duplicating the key columns.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Here’s an example or reference partitioning:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CREATE TABLE PARENT&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;P1&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;INTEGER&lt;span style="mso-spacerun: yes"&gt;                &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;NOT NULL PRIMARY KEY,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;P2&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;NOT NULL&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARTITION BY RANGE (P1)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;span style="mso-spacerun: yes"&gt;  &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P1 VALUES LESS THAN (100),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P2 VALUES LESS THAN (200),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;PARTITION P3 VALUES LESS THAN (300)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;);&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CREATE TABLE CHILD&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C1&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;INTEGER&lt;span style="mso-spacerun: yes"&gt;                 &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;NOT NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C2&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;             &lt;/span&gt;NOT NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;C3&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;VARCHAR2(1 BYTE)&lt;span style="mso-spacerun: yes"&gt;             &lt;/span&gt;NOT NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;constraint child_pk primary key(c1,c2),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;constraint child_fk foreign key(c1) references parent(p1)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARTITION BY REFERENCE(child_fk);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;And here are the partitions the reference partition example created:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;TABLE_NAME&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;PARTITION_NAME&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;HIGH_VALUE&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;--------------------------&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;------------------------------&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;-------------------&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CHILD&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;P1&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CHILD&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;P2&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CHILD&lt;span style="mso-spacerun: yes"&gt;                        &lt;/span&gt;P3&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARENT&lt;span style="mso-spacerun: yes"&gt;                     &lt;/span&gt;P1&lt;span style="mso-spacerun: yes"&gt;                 &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;100&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARENT&lt;span style="mso-spacerun: yes"&gt;                     &lt;/span&gt;P2&lt;span style="mso-spacerun: yes"&gt;                             &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;200&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARENT&lt;span style="mso-spacerun: yes"&gt;                     &lt;/span&gt;P3&lt;span style="mso-spacerun: yes"&gt;                             &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;         &lt;/span&gt;300&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Notice how child table high value settings are NULL? Since this is an equi-partitioning method where the child inherits its partitioning directly this from the parent, there is no need to duplicate the meta-data. As pointed out above, this also saves the database from storing the actual data in both places. This could be significant with VLDB’s.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Fourth and finally, Oracle has introduced “Virtual Columns based Partitioning.” I wrote about virtual columns last week – and here’s the example.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CREATE TABLE PROD4 (&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;XPNUM&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(13) &lt;span style="mso-tab-count: 1"&gt;         &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;      &lt;/span&gt;NOT&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;STAT&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(2)&lt;span style="mso-spacerun: yes"&gt;      &lt;/span&gt;GENERATED ALWAYS AS ((SUBSTR(XPNUM,1,2))),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;DEPT&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(4)&lt;span style="mso-spacerun: yes"&gt;      &lt;/span&gt;GENERATED ALWAYS AS ((SUBSTR(XPNUM,3,4))),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PNUM&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(7)&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;GENERATED ALWAYS AS ((SUBSTR(XPNUM,7,7))),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CONSTRAINT PROD4_PK PRIMARY KEY (XPNUM)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;Now with 11g, we can even partition on such virtual columns as shown below:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CREATE TABLE VIRT_PART (&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;XPNUM&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;CHAR(13)&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;NOT&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;NULL,&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;STAT&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(2)&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;GENERATED ALWAYS AS ((SUBSTR(XPNUM,1,2))),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;DEPT&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(4)&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;GENERATED ALWAYS AS ((SUBSTR(XPNUM,3,4))),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PNUM&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;CHAR(7)&lt;span style="mso-spacerun: yes"&gt;     &lt;/span&gt;GENERATED ALWAYS AS ((SUBSTR(XPNUM,7,7))),&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;CONSTRAINT VIRT_PART_PK PRIMARY KEY (XPNUM)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARTITION BY HASH (DEPT)&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;PARTITIONS 4;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: 'Times New Roman'"&gt;Wow – Partitioning has come a long way baby&lt;/span&gt;&lt;/p&gt;
&lt;/font&gt;</description>
      <link>http://www.toadworld.com/BLOGS/tabid/67/EntryID/114/Default.aspx</link>
      <author>Bert Scalzo</author>
      <comments>http://www.toadworld.com/BLOGS/tabid/67/EntryID/114/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.toadworld.com/Default.aspx?tabid=67&amp;EntryID=114</guid>
      <pubDate>Tue, 21 Aug 2007 12:21:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.toadworld.com/DesktopModules/Blog/Trackback.aspx?id=114</trackback:ping>
    </item>
  </channel>
</rss>