Search

OakieTags

Who's online

There are currently 0 users and 25 guests online.

Recent comments

Oakies Blog Aggregator

Jonathan Lewis tests Delphix

Ask Jonathan about Delphix at

http://jonathanlewis.wordpress.com/2013/02/06/delphix/

Jonathan Lewis has graciously accepted an offer to come out to sunny California next month  and spend a few days at Delphix !  Jonathan will be putting  Delphix through it’s paces.  I’m super excited to have Jonathan  test Delphix and then learn about what he discovers. We are planning on co-presenting a webinar on the findings as well as Jonathan will be blogging is findings.

If you have questions for Jonathan about Delphix or scenarios you’d like him to test out then ask Jonathan to  test them out by commenting on  his blog post  on Delphix:

Jonathan Lewis’ blog post on Delphix

As a performance architect at Delphix for the past 2 years,   I’ve been  involved in all sorts of Delphix performance related work, benchmarks and tests.  I’ve spent much of that time personally pounding on Delphix and I am convinced that the technology is rock solid , fast and agile. I can’t understand why every Oracle shop doesn’t already have Delphix in place. Its incredible. With out Delphix the cloning process is like dragging huge weights around. With Delphix the cloning process is fast and light like having enormous power at ones fingertips.

For more information on Delphix see: http://www.delphix.com/products/how-it-works/

 

 

 

Understanding Oracle Optimizer Statistics Webinar Q&A

There were quite a few questions asked during the webinar yesterday that I didn't have time to answer online. So, here's the list of questions from the webinar transcripts with my answers. In some cases, I combined several similar questions and gave a single answer. Hope it's helpful!

1. Can you give your thoughts on bind peeking and how this relates to statistics?
Bind-peeking occurs during the hard parse of a SQL statement that includes a bind variable. At the time of the parse, the optimizer will "peek" at the contents of the bind variable and use that value in its cardinality calculation. The issue that can occur happens when the data is skewed (i.e. there are some frequently occurring values and some infrequently occurring values). If a histogram is present on that column and a literal is used in the SQL - instead of a bind variable - the optimizer is able to determine the cardinality exactly for that value because each query that uses a different literal value would require a new hard parse. Each parse could result in a different plan selection depending on the estimates derived for that specific value. But, the problem is that since the bind is present, there will be only one hard parse of the statement and thus whichever bind variable value is present during the initial parse, that's the plan that is in place for that specific SQL. Until that plan gets aged out of the library cache, it will continue to be used. So, if another bind variable value is used later and that value would be better serviced by a different plan operation, it would still use the original plan. This has changed in later versions of Oracle with the advent of features such as adaptive cursor sharing and cardinality feedback. But, the answer to your question is that bind peeking relates to statistics by making it a bit harder for the optimizer to create plans that are optimal for different bind values. Otherwise, how the optimizer uses the statistics is identical to a query that doesn't use binds.

2. How important are the system statistics (no workload statistics and workload statistics)?
Do you recommend to use workload statistics? When to use workload stats?
What about system statistics do you recommend to collect them?

Workload statistics are intended to help the optimizer understand workload characterizations that change over the course of the day (or whatever time period that is specific to you). For example, if your database is heavy OLTP between 8am and 6pm and heavy batch/reporting between 6pm and 8am, you could let the optimizer know about these different types of workload by implementing workload stats. The way it would work is that you would collect/capture workload stats twice: once during the daytime OLTP hours and once during the evening batch hours. The captured stats indicate how cpu, IO and throughput looks during that time period and could show the optimizer that the daytime hours are full of numerous fast-running queries whereas the evening hours are consumed by long-running queries. This information can help the optimizer choose plans more appropriate to each workload (for example, more index scans during the day and more full scans during the evening). Noworkload stats are in place by default and use fairly innocuous values for these stats. If you've never used workload stats, I advise caution before attempting to implement them. Different workload stats can/will effect the optimizer's plan choices and it may do so in ways that effect more plans than you expect (or want). So, while workload stats can provide the optimizer additional information from which to develop plans, make sure you are prepared to do in-depth and thorough testing before implementing them.

3. Do the order of predicates in the where clause influence in any way the order the optimizer will use them, i.e. if I put the filter for my largest table first, would it take it first?
The order of predicates used to make a difference in the long ago prior to the advent of cost-based optimization. But today's optimizer, using stats, will calculate which predicates will provide the best filtering and execute those first. So, the only reason to write your predicates in any order is so that you can verify what you expect with what the optimizer ends up choosing in the plan. If you think the order should be different than the optimizer chooses, you can quickly compare your written order with the steps in the plan and see where things are "off". Then, you can verify where the optimizer went wrong by reviewing the statistics and comparing the actual vs estimated values the optimizer made.

4. So are you stuck with no histogram to account for skew if you use bind variables?
No, you're not stuck. You just have to realize that skew and bind variables don't always play nicely together. As I mentioned in the earlier answer on bind peeking, today's optimizer is much better at handling binds and data skew. If, however, you find that a particular SQL's behavior is unpredictable and you have to have stability, you may have to consider writing the SQL specifically to accommodate certain cases of skew. For example, you may write two SQL statements and use IF/THEN logic in your code to execute the correct SQL based on the bind value to be used. It requires extra code and knowing about specific corner cases where skew is a problem, but when it's something that is important enough, that may be your best option.

5. Are terms "selectivity" and "density" used interchangeably?
The difference is that density refers to the computed answer to the expression 1/number-of-distinct-column-values. Each column has its own density. Selectivity is typically thought of as the combined densities of multiple columns (or predicates). Such that if you had a WHERE clause of WHERE gender = 'F' and district = 12, the density for gender would be 1/2, or .50, and the density for district would be 1/12, or .083. The predicate selectivity would be .50 x .083 = .0415. But, if you only have a single predicate, then you could use the terms interchangeably but I prefer to keep the two terms separate for clarity.

6. As a general default, what value would you recommend for the "method_opt" parameter of dbms_stats.gather_schema_stats, and would your recommendation be different for Oracle 11.2 vs. 9.2?
In v11, particularly 11.2, I'd recommend using the default method_opt of FOR ALL COLUMNS SIZE AUTO. There have been numerous improvements in how stats are collected and I think the defaults provide "close to perfect" results in most cases. I'd have to say that I didn't start using the defaults until this latest version. For pre-11 Oracle versions, I stuck with FOR ALL COLUMNS SIZE 1 and then did separate collections for tables/columns that I knew would benefit from histograms. The bottom-line is that there really is no "one size fits all" way to collect stats. Your data and your SQL have specific nuances that only you can know. But, if you're running the latest version of Oracle, I'd start with the defaults and modify/adjust from there to meet your specific needs.

7. Which version did Extended Statistics come out in?
11g release 1

8. Is there a way to see the transformed statement?
The transformed statement isn't emitted anywhere. The closest you can get is to use an optimizer trace, 10053, and review that information to see which transformations were considered and selected.

9. While SQL remains the definitive language of DBMS, increasingly, Java in the database through JDBC or other server side programming have increased with Oracle and DB2; are DBAs doing well with the complexity of integrating SQL, PL/SQL, JAVA and JEE in delivering effective DBMS performance and in ensuring enterprise application security?
The biggest issue I see is that there are usually multiple groups that each have expertise in the different disciplines. Java developers have certain biases and PL/SQL developers have theirs. Sometimes these biases, or preferences for how to do something, cause the final product to suffer. I think the key is that all groups, regardless of the tool they are using, must remember that the database is the core (and common) element. Understanding how the database does what it does (i.e. how it executes SQL) is critical. Then, each tool can be utilized to exploit its strengths while making sure to support what the database needs and can do best.

10. After using the hint with 2 predicates why is Optimizer estimating 100 rows? I am assuming the last row in stats is showing the optimizer estimated rows the SQL will return
When using a dynamic_sampling hint at level 4, the optimizer will be able to consider relationships/dependencies between columns it previously considered independently of one another. Since the two columns used in the example were identical (i.e. they contained identical data and thus either used alone would return the same answer), by default, they would be considered independently of one another and would cause the selectivity to be too low. However, when the hint is applied and the relationship between the columns is known, the optimizer computes the selectivity properly so that it is the same as if only a single predicate were used.

11. What would be the difference between letting the out of the box gather stats vs just creating the gather stats on the specific schemas that is used by the application?
Out of the box has multiple meanings. It can refer to the default settings and the default scheduled maintenance job where stale stats are gathered. In either case, I think using default settings (like method_opt FOR ALL COLUMNS SIZE AUTO) are a good place to start. But, as I already mentioned in a previous answer, I think each site needs to adjust stats collection parameters to properly handle their own unique needs. As for the default scheduled maintenance job that collects stale stats, I'm a little wary of that one. I prefer to control when stats are collected so the default job makes me feel less in control of things. So, once again I'll say that I think the defaults (all of them) are there because they are intended to suit the needs of most databases, most of the time. Only you can determine if the defaults "as is" work in your situation and if not, then you must adjust accordingly.


12. How often should the data dictionary stats be gathered?

I'll answer your question with another question: how often and by how much does the data dictionary in your database change significantly enough to require updated stats? You have to know the answer to that question before you can decide the best collection strategy for dictionary stats in your environment. I will say that if you are upgrading versions or doing any significant patching that effects data dictionary content, collecting dictionary stats should be done after that effort.

13. Does RULE hint prevent dynamic sampling?
Yes, if the RULE hint is used, dynamic sampling will not be used. The reason is because dynamic sampling is used by the cost-based optimizer to gather statistics that are used in the development of the plan. When the rule-based optimizer is used, then these statistics are irrelevant and will not be collected.

14. Does dynamic sampling occur every sql run even within the same session?
Dynamic sampling occurs during the hard parse of any SQL statement that either doesn't have stats on an object used in the SQL or if a dynamic_sampling hint exists or if the optimizer_dynamic_sampling instance parameter setting is high enough to "kick in". But, once a single SQL has been parsed and the plan chosen and loaded into the library cache, it will be used until the plan is aged out.

15. What do you do for stats on a highly changing table?
If the changes to the table cause the number of rows to increase enough or the distribution of values to change enough so that skewed values shifts within columns, then you need to gather stats frequently enough to allow the optimizer to adjust plans based on the updated stats so that you get (hopefully) the best, optimally performing plan. However, if the changes to number of rows and distribution of values doesn't really effect the plans the optimizer should choose, then I wouldn't collect as frequently and instead collect on a regular schedule that suits your needs (daily, weekly, bi-weekly, etc). In the end, the reason to collect stats is that the plans the optimizer is choosing using the current stats aren't adequate. If you need new plans to be derived, then you'd collect new stats. If you don't want plans to change, then don't collect.

16. You have asked dynamic sampling = 4 . Is there particular reason why 4?
Level 4 is the level at which dynamic sampling will consider complex predicates (an AND or OR operator between multiple predicates on the same table).

17. When would you want to lock stats?  Also if you have a transaction table that is cleared out each minute, would you want to prevent stats from being generated on that table?
I'd want to lock stats on a table if
1) the table is static and never or rarely changes
2) if the table is emptied and reloaded frequently but always contains basically the same amount and type of data
3) I don't want changes to stats on this table to cause plan changes
4) I want to delete all stats on a table and prevent any new stats from being collected

If I have a frequently cleared and reloaded table, I'd either want to collect a set of stats at a time when the contents of the table are representative of what is typically queried and then lock them. Or, I'd want to delete the stats completely and lock them so that future stats collections are not allowed but instead remain empty thus allowing dynamic sampling to kick in based on the optimizer_dynamic_sampling parameter setting (which I'd want to set to at least 2 and most likely 4 for that table).

Delphix

If you’re a regular follower or my blog you may recall Kyle Hailey and the joint webinar we did nearly two years ago on “Visual SQL Tuning” covering an approach I’ve written about in the past and a product that he developed at Embarcadero to automate the work that I’d been doing by hand and eye.

Kyle has now moved on to Delphix, and has become involved with another really interesting piece of technology – database virtualization. How do you supply a terabyte sized database to five different development teams without using up 5TB of disc space ? Create an operating environment that keeps one master copy of the database while maintaining a set of (small) private files for each team that hold private copies of the blocks that have been changed by that team – and that’s just one feature of the product.

The product is sufficiently interesting (plus I have a healthy regard for Kyle’s opinions) that I’ve accepted an invitation to go over to California for a few days next month to experiment with it, see what it can do, try to stress it a bit and so on. The people at Delphix are so confident that I’ll be impressed that they’re going to let me do this and then write up a blog telling you how things went.

Have a browse around their documentation and if you’re interested add a suggestion to the comment telling me what you’d like me to test, and how, and I’ll see if I can fit it into my timetable (no promises – but if you come up with interesting ideas I’ll see what I can do).

RHCE Certification Articles (continued)…

I mentioned in my previous post on this subject that I had 5 more objectives yet to cover. The articles for those objectives have now been added to the website.

That completes the set!

The articles for both exams are available here. I also have a page listing the objectives for both exams, with links to each of my articles that cover them.

Now I just have to find the time to prepare for and sit the exams… :)

Cheers

Tim…


RHCE Certification Articles (continued)… was first posted on February 6, 2013 at 7:13 pm.
©2012 "The ORACLE-BASE Blog". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.

Understanding Oracle Optimizer Statistics Webinar Follow-up

Thanks to everyone for attending today's webinar on Understanding Oracle Optimizer Statistics sponsored by Embarcadero Technologies. I appreciate everyone who took time to join me today and hope you found it informative.

The webinar recording will be posted within in the next couple of days, but you can download the presentation file now.

Understanding Oracle Optimizer Statistics - presentation

I'll provide the link to the recording as soon as it's available and will update this post with Q&A from the webinar sessions shortly.

Thanks and again and see you in March when I'll be presenting "Back to the Future: Oracle SQL Performance Firefighting using AWR."

Lob CACHE vs NOCACHE – impact on flashback logging

 

I was doing some work for a client, and LOB processing seemed incredibly slow.  After some poking around, it appears that LOB processing is quite sensitive when it comes to flashback mode in the database. Test bench is a simple table with three clobs. 4kb will be insert into each clob in 5000 individual inserts. The "wait" option is applied to the commit to ensure that the standard PLSQL commit optimizations do not come into play.

Database is 11.2.0.1 running in flashback mode.

SQL> create table t_nocache ( x1 clob, x2 clob, x3 clob )
  2    lob ( x1 ) store as ( nocache )
  3    lob ( x2 ) store as ( nocache )
  4    lob ( x3 ) store as ( nocache )
  5    ;

Table created.

SQL> set timing on
SQL> begin
  2  for i in 1 .. 5000 loop
  3    insert into t_nocache values (rpad('x',4000,'x'),rpad('x',4000,'x'),rpad('x',4000,'x'));
  4    commit WRITE WAIT IMMEDIATE;
  5  end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:13.21

So for NOCACHE, the elapsed time is 13 seconds, and then we can inspect where the time was lost:

SQL> @sessev
Sid required: 17

EVENT                                        TOTAL_WAITS TOTAL_TIMEOUTS       SECS PCT        MAX_WAIT
-------------------------------------------- ----------- -------------- ---------- -------- ----------
Data file init write                                   2              0          0 00.00%            0
events in waitclass Other                              2              0          0 00.00%            0
db file single write                                   2              0          0 00.00%            0
control file parallel write                           14              0          0 00.00%            0
CPU                                                                              0 00.00%            0
log file switch (checkpoint incomplete)                2              0        .01 00.11%            1
log file switch completion                             3              0        .01 00.11%            0
control file sequential read                          70              0        .01 00.11%            0
Disk file operations I/O                              11              0        .04 00.44%            1
db file sequential read                              563              0        .13 01.44%            2
buffer busy waits                                      1              0        .25 02.77%           25
direct path write                                  14996              0       1.19 13.16%            2
log file sync                                       4999              0       1.82 20.13%            7
direct path read                                   14865              0       2.24 24.78%            4
flashback log file sync                            14999              0       3.34 36.95%            9

15 rows selected.

SQL> select * from V$FLASHBACK_DATABASE_STAT;

BEGIN_TIME           END_TIME             FLASHBACK_DATA    DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE
-------------------- -------------------- -------------- ---------- ---------- ------------------------
05-feb-2013 15:37:02 05-feb-2013 15:42:06      125911040  126820352  136450048                        0

Test 1 – CACHE lob

SQL> create table t_cache ( x1 clob, x2 clob, x3 clob )
  2    lob ( x1 ) store as ( cache )
  3    lob ( x2 ) store as ( cache )
  4    lob ( x3 ) store as ( cache )
  5    ;

SQL> set timing on
SQL> begin
  2  for i in 1 .. 5000 loop
  3    insert into t_cache values (rpad('x',4000,'x'),rpad('x',4000,'x'),rpad('x',4000,'x'));
  4    commit WRITE WAIT IMMEDIATE;
  5  end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:07.89

So for CACHE, the elapsed time is 8 seconds, and then we can inspect where the time was lost:

SQL> @sessev
Sid required: 17

EVENT                                        TOTAL_WAITS TOTAL_TIMEOUTS       SECS PCT        MAX_WAIT
-------------------------------------------- ----------- -------------- ---------- -------- ----------
Data file init write                                   1              0          0 00.00%            0
control file sequential read                          35              0          0 00.00%            0
control file parallel write                            7              0          0 00.00%            0
events in waitclass Other                              1              0          0 00.00%            0
flashback log file sync                                1              0          0 00.00%            0
CPU                                                                              0 00.00%            0
db file single write                                   1              0          0 00.00%            0
Disk file operations I/O                               8              0        .02 00.38%            1
log file switch completion                             1              0         .1 01.88%           10
buffer busy waits                                      1              0        .25 04.71%           25
log file switch (checkpoint incomplete)                2              0        .45 08.47%           45
log file sync                                       4998              0       1.24 23.35%            6
db file sequential read                             7136              0       1.24 23.35%            4
db file scattered read                              8415              0       2.01 37.85%            2

14 rows selected.

There is an increase in scattered read (ie, bringing blocks into the cache) but the flashback log sync wait has vanished.


SQL> select * from V$FLASHBACK_DATABASE_STAT;

BEGIN_TIME           END_TIME             FLASHBACK_DATA    DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE
-------------------- -------------------- -------------- ---------- ---------- ------------------------
05-feb-2013 15:37:02 05-feb-2013 15:44:18      128581632  129851392  208777728                        0

Flashback log size growth is minimal (ie it was already 125MB from the previous test, and had grown to 128M). Presumably as the flashback process kicks in from time to time in background, this would be expected to grow, but it is no longer synchronous to the foreground process.

Off to Norway !

Speaker_badge_2013

In April I’m off to that famous conference that so many speak about with affection…

The conference on a cruise ship !

There’s a great line up of speakers – if you get a chance, please come along.

http://www.ougn.no/vrseminar-2013

RMOUG, IOUG Collaborate, KSCOPE, and E4 2013

I’ve been really busy lately doing a lot of stuff, and most of the time if I’m doing some intensive research on a topic
I would just put them all in my braindump (wiki) so if you’ve been following this blog might as well subscribe on my wiki RSS because there are just a bunch of bits of research going-on (see this mindmap) and what usually happens is I put them all together to make an awesome presentation/white paper.

So this 2013.. I’ll be presenting at RMOUG, IOUG Collaborate, and KSCOPE 2013 ;)

If you’ll be at RMOUG next week make sure you have the Guidebook app on your phone then search for “RMOUG Training Days 2013” and clicking on it will download the whole guide which has all the details you need to make the most out of a very technical conference ;) the app is awesssomeee, and you can take a pic, tweet, maps, facebook, and most of all my schedule is lined up in one page and very searchable. My schedule is below:

After the lunch with the ACEs on Tuesday, I’ll be hanging out with Tim Gorman, Jeff Smith, and Kris Rice to talk about database careers and I believe for the past few years we’ve been having High School students attend the whole conference so having a career talk would be a good avenue for mentorship, motivation, and some career guidance. And we’ve got some interesting topics and talking points lined up for you guys so this will be really interesting ;)

Then the next day (and I promise to not drink beer the night before) I’ll be delivering two presentations.

  • The first one is “Where did my CPU go?” which I’ll talk about how to compare between various CPU models and hardware platforms (both actual benchmarking and a reasonable method of quickly estimating relative performance based on SPECint_rate2006 and TPC-C results), then detail on the performance differences of cores vs threads, then move on to the database specific stuff which I’ll discuss the different CPU events, and lastly the monitoring/capacity planning of CPU on massively consolidated environments.
  • The 2nd is “A Consolidation Success Story” which covers some very interesting war stories about consolidating mixed workload databases in Exadata ;)

Oh! and lastly, the Enkitec Extreme Exadata Expo will take place on August 5-6, 2013 in Four Seasons Hotel & Resorts in Irving, TX. And the call for papers is open, so if you have something interesting that you’d like to share, please do submit your abstract! ;)

Below is the video of last year’s event, it’s a compilation of all the presenters and the abstract titles and you’ll see me and Randy Johnson @3:20

 

Hope I’ve shared you some good stuff ;)

Why does my full table scan take 10x longer today ?!

Every so often a DSS query that usually takes 10 minutes ends up taking over an hour.  (or one that takes an hour never seems to finish)

Why would this happen?

When investigating the DSS query, perhaps with wait event tracing,  one finds that the query which is doing full table scans and should be doing large multi-block reads and waiting for “db file scattered read” is instead waiting for single block reads, ie “db file sequential read”.  What the heck is going on?

Sequential reads during a  full table scan scattered read query is a classic sign of reading rollback and reading rollback can make that minute(s) full table scan take hours.

What can happen especially after over night jobs, is that if an overnight job fails to finished before the DSS query is run and if that overnight job  does massive updates without committing till then end, then the DSS query will have to rollback any changes made by the updates to the tables the DSS query is accessing.

How do we quickly identify if this our issue?

ASH is good at identify it. On the other hand it’s often impractical to whip up from scratch an ASH query and that’s where ashmasters on Github comes in. This ASH query and others are on Github under ashmasters.

see https://github.com/khailey/ashmasters

For this case specifically see:

https://github.com/khailey/ashmasters/blob/master/ash_io_top_obj_advanced.sql

Here is the output (slight different format than in the github repository) of a query I used in my Oracle Performance classes

AAS SQL_ID           %  OBJ              TABLESPACE
----- -------------  ---  ---------------  ----------
  .18 0yas01u2p9ch4    6  ITEM_PRODUCT_IX  SOEINDEX
                       6  ORDER_ITEMS_UK   SOEINDEX
                      88  ITEM_ORDER_IX    SOEINDEX
  .32 6v6gm0fd1rgrz    6  MY_BIG_Table     SOEDATA
                      94  #ff0000;">UNDO             #ff0000;">UNDOTBS1

i.e. 95% of the second SQL_ID’s i/o was coming from UNDO. The reads will be single block reads and tremendously slow down the full table scans.

 

Oaktable World video: Database Virtualization and Instant Provisioning

Slides available at: Database Virtualization and Instant Cloning

Thanks to Marcin Przepiorowski  for editing videos and Tim Gorman for funding the videos. For a full list of Oaktable World 2013 videos see http://dboptimizer.com/oaktable-world/

A completely new and totally different database virtualization presentation will be given at

  • RMOUG  Feb 12, 2013 11:15 room 402 “technical”  and 1:15  rm 407  “marketing” with technical information
  • NoCOUG Feb 21, 2013
  • HOTSOS Mar 5, 2013

 

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">What is Database Virtualization?


#42576d;"> Perhaps the single largest storage consolidation opportunity in history

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">By Kyle Hailey, Delphix http://delphix.com
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">January, 2013

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Brief

How would you like to

  • Double development output
  • Lighten DBA work load
  • Reduce storage

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Existing database cloning technologies allow increased development output, fewer bugs in production, and reduced DBA workload.  Database virtualization, built upon these technologies, can greatly increase these gains.  In this paper we’ll examine the history of using database clones to improve application development and the technical advances of thin provisioned clones and ultimately database virtualization that allow massive gains in productivity.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Introduction

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Oracle estimates that customers deploy, on average, 12 clones of production databases to non-production environments.  These database clones are used to support the software development lifecycle – developing new functionality,  testing new versions of applications by quality assurance (QA) and user acceptance testing (UAT) prior to production. The clones are also used for reporting and hoc information queries. Further, Oracle predicts this average will double by the time Oracle 12c is adopted.*  Today, most cloning is accomplished by creating full physical copies of production databases. These full physical copies are time consuming to make, requiring significant DBA time, storage space, and generally lead to project delays.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Development demands preclude organizations from working directly with the production database.  Development of new versions of applications must be performed in a sandbox where schema changes and data additions, subtractions, and manipulations can be performed without affecting business continuity.  After development, QA and UAT testing must be done on a system that matches the development specifications, along with suitable data.  Finally, ad hoc and reporting queries can have unexpected resource consumption which negatively affects performance on production systems.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Development and QA processes can further exacerbate the need for copies.  Developers generally work on separate branches of code which can have associated requirements for database schema changes or specific datasets.  If developers are sharing a database copy, the job falls to the developers to make sure they approve any changes and these changes are compatible with what everyone else is working on.  This process of approving changes alone can take weeks and add much more time debugging when data or schema changes break others’ code.  Ideally, developers would operate in a sandbox with a their own copy of the production test database.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">QA generally run multiple regression test suites, validating that the newly developed functionality works and that existing functionality hasn’t broken.  When working with a single copy of a production database, this puts QA in a bind – they either have to run all tests suites simultaneously or serially.  When the test suites are run simultaneously, teams run the risk of compromising the results as data are modified by multiple independent tests.   Test suites can be run serially – refreshing the database copy after each test, but at a massive hit to productivity.  Much like with development, the ideal scenario is a production clone for each test suite.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">As an example scenario, a customer with a 1 terabyte database with 100 developers and 20 suites would need close to 130 production database copies (one database copy per developer a test suite, and a few extra for branching, merging, ad hoc queries, and reporting).  Understandably, very few companies have the resources (DBA time, storage) to provision these, let alone keep them refreshed for the duration of the project.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Given all the high demand for clones of production databases, companies and DBAs often struggle to keep up and must make sacrifices in quality or quantity.  The compromises reached are generally fewer, shared databases, partial subset databases, or a mixture of both.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Solutions

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Development productivity gains, reduction of production bugs, and DBA time savings have been available without extra licenses through little known functionality in Oracle since version 11.2.0.2.  Even greater productivity gains are available with industry leading technologies, supporting additional versions of Oracle and other leading databases.  These technologies enable productivity gains by reducing the workload and resource required to provision multiple copies of production databases.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">In in our previous example, creating 130 copies of a 1TB database is easily possible in the space of a single copy of the production database using thin provision cloning. Thin provision cloning gives enormous disk savings by sharing the majority of source database data blocks.  A large portion of database blocks across multiple copies of a database remain the same, thus thin provision cloning allows those unchanged blocks to be shared between different clones. This technology ultimately led to database virtualization, which goes beyond thin clone provisioning to dramatically reduce the overhead of managing many cloned databases providing significant agility to development teams.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database virtualization is based on the core technology of thin provision cloning, which provides clones of production databases in less space and time than making full physical copies.  Database virtualization evolves this technology to provide specific management controls, allowing virtual databases to be created, refreshed, rolled back, cloned, branched  and deleted in minutes. Virtual databases can be provisioned from any time frame (down to the second) within the source database’s retention window.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">This functionality allows each developer and each QA test suite to have their own full copy of a production database.  Further, developers and testers can have access to weeks worth of backup databases, in the space of a single backup.  These backups can be brought online in minutes, data reviewed or extracted and the copy removed in minutes. Database virtualization allows DBAs to quit having to make compromises – they can provide any number of databases without worrying about the scope of the effort or the space required, and developers and testers can ensure significantly higher quality with more complete data.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">In recap, the three industry technologies available for making clones are:

  1. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Full physical clone
  2. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Thin provisioned clone
  3. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database virtualization

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Next we’ll describe how each of these technologies solve the problems presented by creating copies of production databases, and the benefits that each evolutionary step provide.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Technologies

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Each of the technologies follows along an evolutionary path – full physical clones, thin provision clones, and database virtualization offer the ability to create multiple copies of production databases, but where they differ is in implementation feasibility and automation.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Full Physical Clone

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Full physical clones are the classic way to make copies of production databases to non production environments. Full copies are just that – an entirely new instance of a database, separate from the production systems.  These clones are time consuming, resource intensive, and space consuming.  On average, the time to create a full physical clone is about two weeks from initial request to useable database instance.  To DBAs the core issue is clear – significant work and time is invested to make exact copies, much of which is unused meaning that the majority of the data blocks are and will remain identical.  Further, the work done by DBAs to create the database copies is immediately out of date and there is no easy management solution for maintaining, refreshing, or modifying these clones.  Database copies can be created, however significant effort is required from the DBA, development and QA teams to  work around the limitations of the system.  

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Thin Provisioned Cloning

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Thin provisioned cloning was the first technology to address the issue of storing large numbers of identical data blocks. Thin provisioning introduces a new layer over a copy of a source databases. Each clone has a separate thin layer where the clone maintains its changes to the central copy, which remains unchanged. As each clone has a separate thin layer that only it can see, each has the appearance of being a full physical copy of the source database. Thin provisioning can eliminate much of the space demand of database copies, reducing the associate storage cost of non-production database copies.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">There are three categories of thin provisioning technology:

  1. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Single point in time
  2. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Multiple but limited points in time
  3. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Multiple but limited points in time in a rolling window

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Single Point in Time

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Single point in time  thin provision cloning is the simplest thin provisioning technology, but the least flexible. Single point in time thin provisioning takes a full database backup at a point in time and allows multiple clones to open this backup. The technical innovation is allowing each clone to write any changes to a private area, thus each clone shares the majority of data blocks with the other clones but the private change area makes it appear to each clone as if they have a full size read/write copy of the database. The downside to this technology is that it does not account for database refreshes – any time a clone requires a newer version of the source database, then an entire new copy of the source database has to be made.  Further, it is only appropriate for situations in which high performance is not a key requirements as it is notably slower than its physical counterparts.  Finally, there is significant scripting required and limited documentation available, meaning that the onus is on the DBA to manage and own the environment.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Oracle first offered this technology in an obscure feature called DBclone in Oracle 11.2.0.2#, however it has performance and management overhead even in limited use and not appropriate for enterprise level development.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Multiple limited clone versions

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">To address the issue of database refreshes, EMC and Fujitsu offer thin provisioned cloning technology which allows sharing data blocks across multiple versions of the source databases. This technology is based on file systems that can take point-in-time snapshots.  The point-in-time snapshot can be cloned to provide a private read/write version of that file system. As changes come into the file system from the source database, new file system snapshots and clones can be created allowing multiple point in time database views.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Unfortunately, after a limited number of snapshots (generally around ten), the system has to be rebuilt requiring a complete new copy of the original database. In addition to periodic rebuilds, these systems also incur major performance hits. The performance hits can be so serious on VMware’s Data Directory linked clone technology that VMware recommends against using it for Oracle databases.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Continuous data versions

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">NetApp offers the ability to not only snapshot and then create clones from the snapshots but also drop any blocks from the original snapshot that are no longer needed, allowing a continuous rolling window of snapshots from the source database. Custom retention windows can be set up – new data blocks are constantly added and old data blocks dropped. As an example, if a two week retention window was desired, the system could snapshot the source database once a day and clones could share snapshots anywhere in that two week window. Blocks particular to snapshots falling outside of the two week time window could be dropped, thus allowing the system to run continuously without requiring rebuilds.
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">While this offers quite a bit of functionality not possible with other thin provisioned clones, there are a number of serious downsides that prevent most enterprises from deploying it.  

  • #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Hardware Lock-in: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">To provision this functionality NetApp requires buying specialized hardware which requires unique administration.  Administrators using this functionality with the NetApp hardware are required to write custom scripts to set up the system.
  • #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">LUN-Level Snapshots: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">NetApp works on LUNs, taking snapshots and making clones of the full LUN as opposed to the datafiles. As it works at the LUN level, it can not detect any corruption in the datafiles that would otherwise be found using RMAN APIs to get the database backups.
  • #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Custom Scripting: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Custom scripting is required to make the original database backup and keep the backup updated with changes from the source database.
  • #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Clone Creation: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">NetApp doesn’t supply any functionality to actually provision the clone databases, and clones can only be made from snapshots.  
  • #000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Clone Flexibility: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">As clone can only be made from snapshots, a number of key use cases cannot be accomplished – clones can’t be created from any timestamp, can’t be rolled back, and can’t be branched.

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Oracle’s ZFS storage appliance has a similar capability as Netapp but requires even more scripting and manual administration than Netapp thus has seen little to no uptake.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database Virtualization

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Thin provisioned clones have been around for almost two decades, yet it has seen very limited uptake due to the need for specialized hardware, expert knowledge, and scripting.  These barriers to entry and the limited set of use cases have ensured that thin provisioned cloning remains an underutilized technology.  Database virtualization was invented to take the benefits of thin provisioned clones, couple it with simple management, and provide significant more data agility through on-demand database access.  
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database virtualization takes the core technology of thin provisioned cloning and extends it providing the ability to:

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Automate initial source database backup, snapshots, and redo log collection.
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Automate data retention, clearing out data older than designated time window
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Automate provisioning a clone from any SCN or second
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Provision clones from multiple sources to the same point in time
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Enable cloning of clones, branching clones, and rolling back clones
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Efficiently store all the changes from source database  
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Run continually and automatically
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">End user virtual database provisioning
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Easy enough to be run by non-DBA, non-sysadmin

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database virtualization technology allows virtual database to be made in minutes, taking up almost no space since the virtual database only creates new control files, redo log files and a new temporary table space. All the rest of the data is initially shared.  This allows the following advantages:

  1. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Databases on demand
  2. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Faster development
  3. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Higher quality testing
  4. #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Hardware reduction

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Databases on Demand

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Virtual databases can be self provisioned in a matter of minutes, eliminating significant bureaucracy.  Provisioning full physical copies can takes weeks, virtual databases take minutes now by eliminating both the data copying time of the production database as well as all the time for requesting, discussing, processing and allocating resources.  When a developer needs a clone they typically have to ask their manager, DBA, storage admin, etc.  The managerial decision making process, administrative tasks and coordination meetings often take weeks. With database virtualization all of the overhead can be eliminated. The developer can provision their own virtual database in minutes, with no storage overhead.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Faster development

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">As the resource and operational cost of providing database copies are eliminated with database virtualization, teams of developers can go from sharing one full physical production copy to each having their own private copy. With a private copy of the database, a developer can change schema and metadata as fast as they want instead of waiting days or weeks of review time to check in changes to a shared development database.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Higher quality testing

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">With as many virtual databases as needed, QA teams no longer need to rely on one full copy of the source database on which to run tests.  With a single database, QA teams often have to stop and refresh and ensure they’re not overlapping tests.  With database virtualization, QA can run many tests concurrently and  the virtual databases can be refreshed back to the original state in minutes allow immediate repeated replay of test suites, captured workloads and patch applications.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Hardware reduction

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database virtualization can dramatically reduce the amount of storage required for database copies.  As the majority of the data blocks are similar, database virtualization requires storing the changed blocks, and even those can be compressed.  
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database virtualization not only saves disk space but can also save RAM.  RAM on the virtual database hosts can be minimized because virtual databases share the same data files and can share the same blocks in the file system cache. No longer does each copy require private memory to cache the data.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Database Virtualization Examples

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Delphix example

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">The Delphix Server is a software stack that implements database virtualization using the Delphix file system (DxFS).   The Delphix Server automates the process of database virtualization and management, and doesn’t require any specialized hardware. It only requires an x86 box to run the software and access to LUNs with about the same amount of the disk space of the database to be virtualized. The source database is backed up onto the Delphix virtual appliance via automated RMAN APIs, the data is compressed, Delphix automates syncing of the local copy with changes in production, freeing of data blocks outside the time retention window and Delphix handles the provisioning of virtual databases. A virtual database can be provisioned from any SCN or second in time during the retention window (typically two weeks).

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Oracle Example

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Oracle is enabling database virtualization in Oracle 12c with Snapshot Manager Utility (SMU) a pay for  licensed software utility . The utility runs on the Oracle ZFS storage appliance, where the the source database data files are stored.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Summary

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Thin provision cloning has been around nearly two decades but has not been widely adopted due to the high barriers to entry.  These barriers, including specialized hardware, consistent system rebuilds, specialized storage administrators, and custom scripting have led to the de facto solution being physical clones.  Short of a more attractive option, companies have opted to create full or partial physical clones and deal with the ramifications of incomplete datasets, refresh difficulty, and concurrent use. With database virtualization, the hardware and management barriers have finally been eliminated allowing enterprises to offer significant database agility.

 

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Appendix


#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Here are a list of the technologies that can be used to create thin provision clones

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">EMC – system rebuild issues after a few snapshots, hardware lock-in, requires advanced  scripting, performance issues
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">NetApp – hardware lock-in, size limitations, requires advanced  scripting
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Clone DB (Oracle) – single version of source database only, performance issues, requires advanced scripting
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">ZFS Storage Appliance (Oracle)  – hardware lock-in, requires advanced scripting
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Data Director (VMware) -  system rebuild issues, performance issues, x86 databases only,  officially not supported for thin provisioning cloning of Oracle databases
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Oracle 12c Snapshot Manager Utility (SMU) – hardware lock-in, requires source database have it’s datafiles located on Oracle ZFS Appliance
  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Delphix – automated solution for both administrator and end user. Delphix works for Oracle 9,10,11 on RAC, Standard Edition and Enterprise Edition. Fully automated with time retention windows and end user self service provisioning. Also support SQL Server databases. With Delphix there are no size restrictions and unlimited clones and snapshots. Snapshots can even be taken of snapshots creating branched versions of source databases.

#000000; background-color: transparent; font-weight: bold; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">References


#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;"> 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">CloneDB

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://www.oracle-base.com/articles/11g/clonedb-11gr2.php

-    http://oracleprof.blogspot.ie/2013/01/how-dnfs-database-clone-works-part-1.html
#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">

 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">ZFS

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://hub.opensolaris.org/bin/download/Community+Group+zfs/docs/zfslast.pdf

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;"> 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">ZFS Appliance

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://www.oracle.com/technetwork/articles/systems-hardware-architecture/cloning-solution-353626.pdf

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;"> 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Data Director

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://www.virtuallyghetto.com/2012/04/scripts-to-extract-vcloud-director.html

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1015180

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://myvirtualcloud.net/?p=1222#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;"> linked Clone

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;"> 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">EMC

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://community.emc.com/servlet/JiveServlet/previewBody/11789-102-1-45992/h8728-snapsure-oracle-dnfs-wp.pdf

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;"> 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">NetApp

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://media.netapp.com/documents/snapmanager-oracle.pdf

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–     #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"> https://communities.netapp.com/docs/DOC-10323#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">  flexclone

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–     #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://blog.thestoragearchitect.com/2010/08/02/netapp-the-inflexibility-of-flexvols/

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;"> 

  • #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline;">#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">Delphix

#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">–      #1155cc; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://delphix.com

#000000; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-weight: normal;">
#000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: initial; vertical-align: baseline; white-space: pre-wrap;">* Charles Garry, Oracle keynote at NYOUG in Dec 2012