Your SlideShare is downloading. ×
0
Top 10, no – make that 11, things about  Oracle Database 11g Release 1 Thomas Kyte http://asktom.oracle.com
The Beginning... <ul><li>Data Model with Structure </li></ul><ul><li>Data Independent of Code </li></ul><ul><li>Set-orient...
First RDBMS: Version 2  June 1979 <ul><li>FIRST Commercial SQL RDBMS </li></ul><ul><li>Impressive First SQL </li></ul><ul>...
 
Oracle7.3  February 1996 <ul><li>Partitioned Views </li></ul><ul><li>Bitmapped Indexes </li></ul><ul><li>Asynchronous read...
 
 
Oracle Database Innovation 30 years of sustained innovation … …  continuing with Oracle Database 11g Audit Vault   Databas...
 
#1 Encrypted Tablespaces
Encrypted Tablespaces <ul><li>Oracle Database 10g Release 2 introduced column encryption </li></ul><ul><ul><li>Could not r...
Encrypted Tablespaces ops$tkyte%ORA11GR1> create tablespace encrypted 2  datafile '/…/encrypted.dbf' size 10m 3  ENCRYPTIO...
Encrypted Tablespaces ops$tkyte%ORA11GR1> create table t 2  tablespace  clear 3  as 4  select * from all_users; Table crea...
Encrypted Tablespaces ops$tkyte%ORA11GR1> alter system checkpoint; System altered. $ strings /…/clear.dbf | grep -i ops.tk...
Encrypted Tablespaces ops$tkyte%ORA11GR1> alter table t move 2  tablespace  encrypted ; Table altered. ops$tkyte%ORA11GR1>...
Encrypted Tablespaces ops$tkyte%ORA11GR1> alter system checkpoint; System altered. $ strings /…/encrypted.dbf | grep -i op...
Encrypted Tablespaces ps$tkyte%ORA11GR1> set autotrace traceonly explain ops$tkyte%ORA11GR1> select * from t where lower(u...
#2 Cache More Stuff
Cache More <ul><li>Everyone knows the fastest way to do something is –  to not do it </li></ul><ul><ul><li>Client Side Cac...
Cache More ops$tkyte%ORA11GR1> /* ops$tkyte%ORA11GR1> drop table t; ops$tkyte%ORA11GR1> create table t as select * from al...
Cache More ops$tkyte%ORA11GR1> set autotrace traceonly ops$tkyte%ORA11GR1> select /*+ result_cache */ 2  owner, 3  object_...
Cache More Execution Plan ------------------------------------------------------------------------------------------------...
Cache More Statistics ---------------------------------------------------------- 0  recursive calls 0  db block gets 1005 ...
Cache More ops$tkyte%ORA11GR1> / 249 rows selected. Statistics ---------------------------------------------------------- ...
Cache More ops$tkyte%ORA11GR1> select * from ( 2  select /*+ result_cache */ 3  owner, object_type, count(*) cnt 4  from t...
Cache More Statistics ---------------------------------------------------------- 0  recursive calls 0  db block gets 0  co...
Cache More SQL> create or replace 2  function  not_cached 3  ( p_owner in varchar2 ) 4  return number 5  as 6  l_cnt numbe...
Cache More SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00...
Cache More SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:...
Cache More SQL> update t set owner = initcap(owner) where rownum = 1; 1 row updated. SQL> commit; Commit complete. SQL> ex...
Cache More SQL> exec dbms_output.put_line( cached( 'SYS' ) ); 29339 PL/SQL procedure successfully completed. Elapsed: 00:0...
#3 Standby Just got better
Standby Database <ul><li>Logical Standby was… </li></ul><ul><ul><li>Limited in type support </li></ul></ul><ul><ul><li>But...
Standby Database <ul><li>Logical Standby has… </li></ul><ul><ul><li>XMLType support </li></ul></ul><ul><ul><li>DBMS_RLS & ...
Active Data Guard:  Develop & Test on Standby DB <ul><li>Use physical standby database for development & testing </li></ul...
Active Data Guard:  Report & Backup from Standby DB <ul><li>Offload reporting to standby </li></ul><ul><ul><li>Simultaneou...
Active Data Guard –  More than a Standby Simultaneous read and  recovery High ROI Automated Disaster  and  performance pro...
#4 Real Application Testing
Real Application Testing – Database Replay <ul><li>Recreate actual production database workload </li></ul><ul><li>Capture ...
#5 Smaller more secure DMP files
Datapump <ul><li>COMPRESSION </li></ul><ul><ul><li>ALL, DATA_ONLY, METADATA_ONLY, NONE </li></ul></ul>$ expdp / directory=...
Datapump <ul><li>ENCRYPTION </li></ul><ul><ul><li>All </li></ul></ul><ul><ul><li>Data_only </li></ul></ul><ul><ul><li>Meta...
#6 Virtual Columns
Virtual Columns <ul><li>Create Table </li></ul><ul><li>Alter Table Add Column </li></ul><ul><li>Are ‘column expressions’ <...
Virtual Columns ops$tkyte%ORA11GR1> /* ops$tkyte%ORA11GR1> create table emp ops$tkyte%ORA11GR1> as ops$tkyte%ORA11GR1> sel...
Virtual Columns ops$tkyte%ORA11GR1> select avg( sal+comm ) avg_comp, avg(sal) avg_sal, avg(comm) avg_comm from emp; AVG_CO...
Virtual Columns ops$tkyte%ORA11GR1> select * from emp where sal > 34821.6827; --------------------------------------------...
Virtual Columns ops$tkyte%ORA11GR1> select * from emp where comm > 50555.261; --------------------------------------------...
Virtual Columns ops$tkyte%ORA11GR1> select * from emp where sal+comm > 85376.9437; ---------------------------------------...
Virtual Columns ops$tkyte%ORA11GR1> ALTER TABLE emp ADD (comp AS  (sal+comm)); Table altered. ops$tkyte%ORA11GR1> exec dbm...
Virtual Columns ops$tkyte%ORA11GR1> select * from emp where sal+comm > 85376.9437; ---------------------------------------...
#7 Partitioning just got  better
Partitioning <ul><li>Composite Completely </li></ul><ul><li>Virtual Column Partitioning </li></ul><ul><li>Partition by Ref...
<ul><li>Partition (or index) on virtual (computed) columns  </li></ul><ul><li>New composite partitioning </li></ul>Enhance...
Partitioning by REFERENCE <ul><li>RANGE( order_date ) </li></ul><ul><li>Primary key  order_id </li></ul>Table ORDERS Jan 2...
<ul><li>New “INTERVAL” partitioning </li></ul><ul><li>Automatically creates a new partition when data outside the existing...
Partitioning ops$tkyte%ORA11GR1> create table audit_trail 2  ( ts  timestamp, 3  data  varchar2(30) 4  ) 5  partition by r...
Partitioning ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2  from user_tab_partitions 3  where t...
Partitioning ops$tkyte%ORA11GR1> insert into audit_trail 2  select sysdate+rownum, 'x' 3  from all_users 4  where rownum <...
Partitioning ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2  from user_tab_partitions 3  where t...
Partitioning ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2  from user_tab_partitions 3  where t...
Partitioning ops$tkyte%ORA11GR1> insert into audit_trail values ( add_months(sysdate,12), 'x' ); 1 row created. ops$tkyte%...
Partitioning ops$tkyte%ORA11GR1> insert into audit_trail values ( add_months(sysdate,6), 'x' ); 1 row created. ops$tkyte%O...
#8 The long awaited  pivot
Pivot ops$tkyte%ORA11GR1> select deptno, 2  sum( decode( job, 'CLERK', sal ) ) clerk, 3  sum( decode( job, 'SALESMAN', sal...
Pivot ops$tkyte%ORA11GR1> select * 2  from (select deptno, job, sal 3  from emp ) e 4  pivot ( sum(sal) for job in 5  ( 'C...
#9 Flashback Data Archive
Flashback Data Archive Total Data Recall <ul><li>Tamper-proof data archive </li></ul><ul><li>Efficient storage and retriev...
#10 Finer Grained Dependency Tracking
Finer Grained Dependency Tracking <ul><li>Fewer Invalidations </li></ul><ul><ul><li>Add to a specification – so what </li>...
Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> create or replace package p1 2  as 3  function f return number; 4  e...
Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> select object_name, status 2  from user_objects 3  where object_name...
Finer Grained Dependency Tracking ops$tkyte%ORA 10GR2 > create or replace package p1 2  as 3  function f return number; 4 ...
Finer Grained Dependency Tracking ops$tkyte%ORA 11GR1 > create or replace package p1 2  as 3  function f return number; 4 ...
Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> create table t ( x int, y int ); Table created. ops$tkyte%ORA10GR2> ...
Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> alter table t add z int; Table altered. ops$tkyte% ORA10GR2 > select...
Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> alter procedure p compile; Procedure altered. ops$tkyte%ORA10GR2> al...
#11 OLTP Table Compression
<ul><li>Oracle 9i compresses data only during bulk load; useful for DW and ILM </li></ul><ul><li>Oracle  11g  compresses w...
<Insert Picture Here> A Q &
 
Upcoming SlideShare
Loading in...5
×

11 Things About11g

1,428

Published on

An excelent 11g and Oracle overview !!! Take a look and enjoy...

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,428
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
106
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • It started with one profound idea In 1970 E.F. Codd wrote the book….the mathematical model that would define the future of RDMBS. He later hooked up with C.J. Date of IBM and Codd and Date would become known as father and grandfather of relational theory. Codd and Date became mythical figures dispensing truths about the purity of various implementations of RDBMs. Had 12 rules of relational databases. Data Model with Structure, Integrity Rules, Operations Data Defined Independently of Programs Set-oriented, Declarative Language
  • No one thought it could be done It wouldn’t be fast enough, no one would buy it The early adopters came to us. First test outperformed Cullinet’s DBMS – immediately realized this was a break-through, and the company would be worth 100’s of millions The FIRST Commercial SQL RDBMS An Impressive First SQL Non-procedural power (joins, subqueries) for ad hoc access A single language for data definition, control, access Unique Oracle extensions: outer join, CONNECT BY A Simple Server No transactions – like MySQL Limited reliability Portability from the Start – driven by customer requirements from the beginning. Digital PDP-11 operating systems: RSX, RSTS, IAS, Unix DEC VAX (compatibility mode)
  • As a result of our focus, Oracle leads the industry with a huge number of trend-setting products. Focus on key development areas has lead to a number of industry firsts, from the first commercial relational database, to the first portable tool set and UNIX-based C/S apps, to the first multimedia database architecture. Key Early Differentiators: platform portability, mvrc/row locking, cluster Year Breakthrough 2007 11gR1 Change Assurance 2005 June 10gR2 Database Vault 2004 Grid Computing 2004 January 10gR1 Self managing db 9iR2 XML Database 2002 Oracle Data Guard 2001 Real Application Clusters 2000 Internet File System 1999 8i Internet Enabled Database 1999 Java Support 1999 XML Support 1997 VLDB Support 1997 Messaging Support 1997 Object Relational Support 1997 8.0 Support for Multimedia 1995 Data Warehousing Optimizations 1994 Parallel Operations 1992 Active Business Rules 1992 Distributed Transaction Support 1991 Cluster and MPP Support 1989 Mission Critical OLTP Support 1986 Client/Server Support 1983 Platform Portability 1979 Commercial SQL Implementation * Build our core competency internally, rather than buy product (like IBM or Microsoft). Our development expertise translates to better customer competitiveness
  • This is designed to be a standalone slide that can be put in other presentations
  • Transcript of "11 Things About11g"

    1. 1. Top 10, no – make that 11, things about Oracle Database 11g Release 1 Thomas Kyte http://asktom.oracle.com
    2. 2. The Beginning... <ul><li>Data Model with Structure </li></ul><ul><li>Data Independent of Code </li></ul><ul><li>Set-oriented </li></ul><ul><li>1977 the work begins </li></ul>“ A Relational Model for Large Shared Databanks” E.F. Codd - 1970
    3. 3. First RDBMS: Version 2 June 1979 <ul><li>FIRST Commercial SQL RDBMS </li></ul><ul><li>Impressive First SQL </li></ul><ul><ul><li>Joins, Subqueries </li></ul></ul><ul><ul><li>Outer Joins, Connect By </li></ul></ul><ul><li>A Simple Server </li></ul><ul><ul><li>No transactions, ‘Limited’ Reliability </li></ul></ul><ul><li>Portability from the Start </li></ul><ul><ul><li>Written in Fortran </li></ul></ul><ul><ul><li>But multi-platform – PDP11, Dec VAX </li></ul></ul>
    4. 5. Oracle7.3 February 1996 <ul><li>Partitioned Views </li></ul><ul><li>Bitmapped Indexes </li></ul><ul><li>Asynchronous read ahead for table scans </li></ul><ul><li>Standby Database </li></ul><ul><li>Deferred transaction recovery on instance startup </li></ul><ul><li>Updatable Join View </li></ul><ul><li>SQLDBA no longer shipped. </li></ul><ul><li>Index rebuilds </li></ul><ul><li>DBV introduced </li></ul><ul><li>Context Option </li></ul><ul><li>PL/SQL - UTL_FILE </li></ul><ul><li>Spatial Data Option </li></ul><ul><li>Tablespaces changes - Coalesce, Temporary Permanent, </li></ul><ul><li>Trigger compilation, debug </li></ul><ul><li>Unlimited extents on STORAGE clause. </li></ul><ul><li>Some init.ora parameters modifiable - TIMED_STATISTICS </li></ul><ul><li>HASH Joins, Antijoins </li></ul><ul><li>Histograms </li></ul><ul><li>Oracle Trace </li></ul><ul><li>Advanced Replication Object Groups </li></ul>
    5. 8. Oracle Database Innovation 30 years of sustained innovation … … continuing with Oracle Database 11g Audit Vault Database Vault Grid Computing Self Managing Database XML Database Oracle Data Guard Real Application Clusters Flashback Query Virtual Private Database Built in Java VM Partitioning Support Built in Messaging Object Relational Support Multimedia Support Data Warehousing Optimizations Parallel Operations Distributed SQL & Transaction Support Cluster and MPP Support Multi-version Read Consistency Client/Server Support Platform Portability Commercial SQL Implementation 1977 2007
    6. 10. #1 Encrypted Tablespaces
    7. 11. Encrypted Tablespaces <ul><li>Oracle Database 10g Release 2 introduced column encryption </li></ul><ul><ul><li>Could not range scan </li></ul></ul><ul><ul><li>Primary/foreign key issues </li></ul></ul><ul><li>Tablespace encryption Removes those limitations </li></ul><ul><li>Many encryption algorithms </li></ul><ul><ul><li>3DES168 </li></ul></ul><ul><ul><li>AES128 </li></ul></ul><ul><ul><li>AES192 </li></ul></ul><ul><ul><li>AES256 </li></ul></ul>
    8. 12. Encrypted Tablespaces ops$tkyte%ORA11GR1> create tablespace encrypted 2 datafile '/…/encrypted.dbf' size 10m 3 ENCRYPTION default storage( encrypt ); Tablespace created. ops$tkyte%ORA11GR1> create tablespace clear 2 datafile '/…/clear.dbf' size 10m; Tablespace created.
    9. 13. Encrypted Tablespaces ops$tkyte%ORA11GR1> create table t 2 tablespace clear 3 as 4 select * from all_users; Table created. ops$tkyte%ORA11GR1> create index t_idx 2 on t(lower(username)) 3 tablespace clear ; Index created.
    10. 14. Encrypted Tablespaces ops$tkyte%ORA11GR1> alter system checkpoint; System altered. $ strings /…/clear.dbf | grep -i ops.tkyte OPS$TKYTE from the table ops$tkyte from the index
    11. 15. Encrypted Tablespaces ops$tkyte%ORA11GR1> alter table t move 2 tablespace encrypted ; Table altered. ops$tkyte%ORA11GR1> alter index t_idx rebuild 2 tablespace encrypted ; Index altered.
    12. 16. Encrypted Tablespaces ops$tkyte%ORA11GR1> alter system checkpoint; System altered. $ strings /…/encrypted.dbf | grep -i ops.tkyte [This space intentionally left blank]
    13. 17. Encrypted Tablespaces ps$tkyte%ORA11GR1> set autotrace traceonly explain ops$tkyte%ORA11GR1> select * from t where lower(username) like 'ops$%'; Execution Plan ------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | ------------------------------------------------------------- | 0 | SELECT STATEMENT | | 2 | 112 | | 1 | TABLE ACCESS BY INDEX ROWID| T | 2 | 112 | |* 2 | INDEX RANGE SCAN | T_IDX | 1 | | ------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access(LOWER(&quot;USERNAME&quot;) LIKE 'ops$%') filter(LOWER(&quot;USERNAME&quot;) LIKE 'ops$%')
    14. 18. #2 Cache More Stuff
    15. 19. Cache More <ul><li>Everyone knows the fastest way to do something is – to not do it </li></ul><ul><ul><li>Client Side Cache </li></ul></ul><ul><ul><li>Server Results Cache (JIT-MV) </li></ul></ul><ul><ul><li>PL/SQL Function results cache </li></ul></ul><ul><ul><li>Lots more detail in afternoon session </li></ul></ul>
    16. 20. Cache More ops$tkyte%ORA11GR1> /* ops$tkyte%ORA11GR1> drop table t; ops$tkyte%ORA11GR1> create table t as select * from all_objects; ops$tkyte%ORA11GR1> */ ops$tkyte%ORA11GR1> update t set object_type=object_type where rownum=1; 1 row updated.
    17. 21. Cache More ops$tkyte%ORA11GR1> set autotrace traceonly ops$tkyte%ORA11GR1> select /*+ result_cache */ 2 owner, 3 object_type, 4 count(*) cnt 5 from t 6 group by owner, object_type 7 order by owner, object_type 8 / 249 rows selected.
    18. 22. Cache More Execution Plan -------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 58742 | 1606K| 284 (2)| 00:00:04 | | 1 | RESULT CACHE | 5cwffcum1ajfud1088m1m73f81 | | | | | | 2 | SORT GROUP BY | | 58742 | 1606K| 284 (2)| 00:00:04 | | 3 | TABLE ACCESS FULL| T | 58742 | 1606K| 280 (1)| 00:00:04 | -------------------------------------------------------------------------------------------------- Result Cache Information (identified by operation id): ------------------------------------------------------ 1 - column-count=3; dependencies=(OPS$TKYTE.T); parameters=(nls); name=&quot;select /*+ result_cache */ owner, object_type, count(*) cnt from t group by owner, object_type order by&quot;
    19. 23. Cache More Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 1005 consistent gets 0 physical reads 0 redo size 6922 bytes sent via SQL*Net to client 596 bytes received via SQL*Net from client 18 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 249 rows processed
    20. 24. Cache More ops$tkyte%ORA11GR1> / 249 rows selected. Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 6922 bytes sent via SQL*Net to client 596 bytes received via SQL*Net from client 18 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 249 rows processed
    21. 25. Cache More ops$tkyte%ORA11GR1> select * from ( 2 select /*+ result_cache */ 3 owner, object_type, count(*) cnt 4 from t 5 group by owner, object_type 6 order by owner, object_type 7 ) 8 where cnt > 100 9 / 38 rows selected.
    22. 26. Cache More Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 1516 bytes sent via SQL*Net to client 442 bytes received via SQL*Net from client 4 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 38 rows processed
    23. 27. Cache More SQL> create or replace 2 function not_cached 3 ( p_owner in varchar2 ) 4 return number 5 as 6 l_cnt number; 7 begin 8 select count(*) 9 into l_cnt 10 from t 11 where owner = p_owner; 12 dbms_lock.sleep(1); 13 return l_cnt; 14 end; 15 / Function created. SQL> create or replace 2 function cached 3 ( p_owner in varchar2 ) 4 return number 5 result_cache 6 relies_on(T) 7 as 8 l_cnt number; 9 begin 10 select count(*) 11 into l_cnt 12 from t 13 where owner = p_owner; 14 dbms_lock.sleep(1); 15 return l_cnt; 16 end; 17 / Function created.
    24. 28. Cache More SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 1.93 SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 1.29 SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 1.07
    25. 29. Cache More SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 1.09 SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 0.01 SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 0.01
    26. 30. Cache More SQL> update t set owner = initcap(owner) where rownum = 1; 1 row updated. SQL> commit; Commit complete. SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 1.25 SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 0.01
    27. 31. Cache More SQL> exec dbms_output.put_line( cached( 'SYS' ) ); 29339 PL/SQL procedure successfully completed. Elapsed: 00:00:0 1.21 SQL> exec dbms_output.put_line( cached( 'SYS' ) ); 29339 PL/SQL procedure successfully completed. Elapsed: 00:00:0 0.01 SQL> exec dbms_output.put_line( cached( 'SCOTT' ) ); 6 PL/SQL procedure successfully completed. Elapsed: 00:00:0 0.00
    28. 32. #3 Standby Just got better
    29. 33. Standby Database <ul><li>Logical Standby was… </li></ul><ul><ul><li>Limited in type support </li></ul></ul><ul><ul><li>But was always open for business </li></ul></ul><ul><li>Physical Standby was… </li></ul><ul><ul><li>Easy </li></ul></ul><ul><ul><li>But considered “not useful day to day” </li></ul></ul>
    30. 34. Standby Database <ul><li>Logical Standby has… </li></ul><ul><ul><li>XMLType support </li></ul></ul><ul><ul><li>DBMS_RLS & DBMS_FGA support </li></ul></ul><ul><ul><li>TDE support </li></ul></ul>
    31. 35. Active Data Guard: Develop & Test on Standby DB <ul><li>Use physical standby database for development & testing </li></ul><ul><ul><li>Preserves zero data loss in test/dev mode </li></ul></ul><ul><li>Flashback DB to back-out changes & use as standby </li></ul>Production Database Standby Database Developers, Testers Eliminates cost of idle DR system
    32. 36. Active Data Guard: Report & Backup from Standby DB <ul><li>Offload reporting to standby </li></ul><ul><ul><li>Simultaneously available for recovery </li></ul></ul><ul><li>Offload backups to standby </li></ul><ul><ul><li>Complete database and fast incremental backups </li></ul></ul>Production Database Standby Database Reporting Backups Improves performance on production database
    33. 37. Active Data Guard – More than a Standby Simultaneous read and recovery High ROI Automated Disaster and performance protection Use daily in testing and production Recovery mode only Low ROI Manual intensive Disaster protection only Used in disaster only
    34. 38. #4 Real Application Testing
    35. 39. Real Application Testing – Database Replay <ul><li>Recreate actual production database workload </li></ul><ul><li>Capture production workload incl. concurrency </li></ul><ul><li>Replay workload in test with production timing </li></ul><ul><li>Analyze & fix issues before production </li></ul>Middle Tier Capture DB Workload Storage Oracle DB servers Replay DB Workload Production Environment Test (RAC) Environment`
    36. 40. #5 Smaller more secure DMP files
    37. 41. Datapump <ul><li>COMPRESSION </li></ul><ul><ul><li>ALL, DATA_ONLY, METADATA_ONLY, NONE </li></ul></ul>$ expdp / directory=tmp dumpfile=uncompressed.dmp compression= NONE schemas=ops$tkyte Export: Release 11.1.0.6.0 - Production on Friday, 21 September, 2007 12:23:26 . . exported &quot;OPS$TKYTE&quot;.&quot;BIG_TABLE&quot; 24.57 MB 250000 rows . . exported &quot;OPS$TKYTE&quot;.&quot;T&quot; 6.791 MB 67945 rows $ expdp / directory=tmp dumpfile=compressed.dmp compression= ALL schemas=ops$tkyte Export: Release 11.1.0.6.0 - Production on Friday, 21 September, 2007 12:23:58 . . exported &quot;OPS$TKYTE&quot;.&quot;BIG_TABLE&quot; 3.110 MB 250000 rows . . exported &quot;OPS$TKYTE&quot;.&quot;T&quot; 762.1 KB 67945 rows $ ls -l /tmp/*compressed.dmp -rw-r----- 1 ora11gr1 ora11gr1 4124672 Sep 21 12:24 /tmp/compressed.dmp -rw-r----- 1 ora11gr1 ora11gr1 33136640 Sep 21 12:23 /tmp/uncompressed.dmp
    38. 42. Datapump <ul><li>ENCRYPTION </li></ul><ul><ul><li>All </li></ul></ul><ul><ul><li>Data_only </li></ul></ul><ul><ul><li>Metadata_only </li></ul></ul><ul><ul><li>None </li></ul></ul><ul><ul><li>Encrypted_columns_only </li></ul></ul><ul><li>PARTITION_OPTIONS </li></ul><ul><ul><li>None </li></ul></ul><ul><ul><li>Departition </li></ul></ul><ul><ul><li>Merge </li></ul></ul><ul><li>REUSE_DUMPFILES </li></ul><ul><li>Ability to use DML error logging features </li></ul><ul><ul><li>DATA_OPTIONS parameter </li></ul></ul>
    39. 43. #6 Virtual Columns
    40. 44. Virtual Columns <ul><li>Create Table </li></ul><ul><li>Alter Table Add Column </li></ul><ul><li>Are ‘column expressions’ </li></ul><ul><ul><li>Expressions involving other columns in table </li></ul></ul><ul><ul><li>Constants </li></ul></ul><ul><ul><li>Deterministic functions </li></ul></ul><ul><li>Ease of use and Optimizer enhancement </li></ul>
    41. 45. Virtual Columns ops$tkyte%ORA11GR1> /* ops$tkyte%ORA11GR1> create table emp ops$tkyte%ORA11GR1> as ops$tkyte%ORA11GR1> select all_objects.*, object_id sal, round(dbms_random.value( 1000, 100000 )) comm ops$tkyte%ORA11GR1> from all_objects ops$tkyte%ORA11GR1> / ops$tkyte%ORA11GR1> ops$tkyte%ORA11GR1> */ ops$tkyte%ORA11GR1> exec dbms_stats.gather_table_stats( user, 'EMP' ) PL/SQL procedure successfully completed.
    42. 46. Virtual Columns ops$tkyte%ORA11GR1> select avg( sal+comm ) avg_comp, avg(sal) avg_sal, avg(comm) avg_comm from emp; AVG_COMP AVG_SAL AVG_COMM ---------- ---------- ---------- 85376.9437 34821.6827 50555.261 ops$tkyte%ORA11GR1> select count(case when sal+comm > 85376.9437 then 1 end) above_comp, 2 count(case when sal > 34821.6827 then 1 end) above_sal , 3 count(case when comm > 50555.261 then 1 end) above_comm 4 from emp; ABOVE_COMP ABOVE_SAL ABOVE_COMM ---------- ---------- ---------- 33957 33830 34036
    43. 47. Virtual Columns ops$tkyte%ORA11GR1> select * from emp where sal > 34821.6827; -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 34673 | 3893K| 309 (1)| 00:0 |* 1 | TABLE ACCESS FULL| EMP | 34673 | 3893K| 309 (1)| 00:0 -------------------------------------------------------------------- ABOVE_COMP ABOVE_SAL ABOVE_COMM ---------- ---------- ---------- 33957 33830 34036
    44. 48. Virtual Columns ops$tkyte%ORA11GR1> select * from emp where comm > 50555.261; -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 33943 | 3811K| 309 (1)| 00:0 |* 1 | TABLE ACCESS FULL| EMP | 33943 | 3811K| 309 (1)| 00:0 -------------------------------------------------------------------- ABOVE_COMP ABOVE_SAL ABOVE_COMM ---------- ---------- ---------- 33957 33830 34036
    45. 49. Virtual Columns ops$tkyte%ORA11GR1> select * from emp where sal+comm > 85376.9437; -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3398 | 381K| 309 (1)| 00:0 |* 1 | TABLE ACCESS FULL| EMP | 3398 | 381K| 309 (1)| 00:0 -------------------------------------------------------------------- ABOVE_COMP ABOVE_SAL ABOVE_COMM ---------- ---------- ---------- 33957 33830 34036
    46. 50. Virtual Columns ops$tkyte%ORA11GR1> ALTER TABLE emp ADD (comp AS (sal+comm)); Table altered. ops$tkyte%ORA11GR1> exec dbms_stats.gather_table_stats( user, 'EMP', method_opt=> 'for columns comp ' ); PL/SQL procedure successfully completed.
    47. 51. Virtual Columns ops$tkyte%ORA11GR1> select * from emp where sal+comm > 85376.9437; -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 33927 | 3975K| 309 (1)| 00:0 |* 1 | TABLE ACCESS FULL| EMP | 33927 | 3975K| 309 (1)| 00:0 -------------------------------------------------------------------- ABOVE_COMP ABOVE_SAL ABOVE_COMM ---------- ---------- ---------- 33957 33830 34036
    48. 52. #7 Partitioning just got better
    49. 53. Partitioning <ul><li>Composite Completely </li></ul><ul><li>Virtual Column Partitioning </li></ul><ul><li>Partition by Reference </li></ul><ul><li>Interval Partitioning </li></ul>
    50. 54. <ul><li>Partition (or index) on virtual (computed) columns </li></ul><ul><li>New composite partitioning </li></ul>Enhanced Partitioning Range List Hash Range 9i 8i List Range List Hash Range 11g 9i 8i List 11g 11g 11g JAN FEB >5000 1000- 5000 ORDERS RANGE-RANGE Order Date by Order Value USA EUROPE >5000 1000- 5000 ORDERS LIST-RANGE Region by Order Value USA EUROPE Gold Silver ORDERS LIST-LIST Region by Customer Type
    51. 55. Partitioning by REFERENCE <ul><li>RANGE( order_date ) </li></ul><ul><li>Primary key order_id </li></ul>Table ORDERS Jan 2006 ... ... Feb 2006 Table LINEITEMS Jan 2006 ... ... Feb 2006 <ul><li>RANGE( order_date ) </li></ul><ul><li>Foreign key order_id </li></ul><ul><li>Partitioning key inherited through PK-FK relationship </li></ul><ul><li>Avoids redundant storage, maintenance of order_date </li></ul>
    52. 56. <ul><li>New “INTERVAL” partitioning </li></ul><ul><li>Automatically creates a new partition when data outside the existing range is first inserted </li></ul><ul><ul><li>E.g., monthly partitions, automatic new partition first day of the month </li></ul></ul><ul><li>Composite partitioning: interval, interval-list, interval-hash, and interval-range </li></ul><ul><li>Automates partition management </li></ul>Partitioning Automation ORDERS Jul Aug Sep 1 2007 Sep
    53. 57. Partitioning ops$tkyte%ORA11GR1> create table audit_trail 2 ( ts timestamp, 3 data varchar2(30) 4 ) 5 partition by range(ts) 6 interval (numtodsinterval(1,'day')) 7 store in (users, example ) 8 (partition p0 values less than 9 (to_date('22-sep-2007','dd-mon-yyyy')) 10 ) 11 / Table created.
    54. 58. Partitioning ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2 from user_tab_partitions 3 where table_name = 'AUDIT_TRAIL'; PARTITION_ TABLESPACE HIGH_VALUE ---------- ---------- ---------------------------------- P0 USERS TIMESTAMP' 2007-09-22 00:00:00'
    55. 59. Partitioning ops$tkyte%ORA11GR1> insert into audit_trail 2 select sysdate+rownum, 'x' 3 from all_users 4 where rownum <= 5 5 / 5 rows created.
    56. 60. Partitioning ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2 from user_tab_partitions 3 where table_name = 'AUDIT_TRAIL'; PARTITION_ TABLESPACE HIGH_VALUE ---------- ---------- ---------------------------------- P0 USERS TIMESTAMP' 2007-09-22 00:00:00' SYS_P66 EXAMPLE TIMESTAMP' 2007-09-23 00:00:00' SYS_P67 USERS TIMESTAMP' 2007-09-24 00:00:00' SYS_P68 EXAMPLE TIMESTAMP' 2007-09-25 00:00:00' SYS_P69 USERS TIMESTAMP' 2007-09-26 00:00:00' SYS_P70 EXAMPLE TIMESTAMP' 2007-09-27 00:00:00' 6 rows selected.
    57. 61. Partitioning ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2 from user_tab_partitions 3 where table_name = 'AUDIT_TRAIL'; PARTITION_ TABLESPACE HIGH_VALUE ---------- ---------- ------------------------------- P0 USERS TIMESTAMP' 2007-09-22 00:00:00'
    58. 62. Partitioning ops$tkyte%ORA11GR1> insert into audit_trail values ( add_months(sysdate,12), 'x' ); 1 row created. ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2 from user_tab_partitions 3 where table_name = 'AUDIT_TRAIL'; PARTITION_ TABLESPACE HIGH_VALUE ---------- ---------- ------------------------------- P0 USERS TIMESTAMP' 2007-09-22 00:00:00' SYS_P180 EXAMPLE TIMESTAMP' 2008-11-10 00:00:00'
    59. 63. Partitioning ops$tkyte%ORA11GR1> insert into audit_trail values ( add_months(sysdate,6), 'x' ); 1 row created. ops$tkyte%ORA11GR1> select partition_name, tablespace_name, high_value 2 from user_tab_partitions 3 where table_name = 'AUDIT_TRAIL'; PARTITION_ TABLESPACE HIGH_VALUE ---------- ---------- ------------------------------- P0 USERS TIMESTAMP' 2007-09-22 00:00:00' SYS_P181 EXAMPLE TIMESTAMP' 2008-05-10 00:00:00' SYS_P180 EXAMPLE TIMESTAMP' 2008-11-10 00:00:00'
    60. 64. #8 The long awaited pivot
    61. 65. Pivot ops$tkyte%ORA11GR1> select deptno, 2 sum( decode( job, 'CLERK', sal ) ) clerk, 3 sum( decode( job, 'SALESMAN', sal ) ) salesman, 4 sum( decode( job, 'MANAGER', sal ) ) manager, 5 sum( decode( job, 'ANALYST', sal ) ) analyst, 6 sum( decode( job, 'PRESIDENT', sal ) ) president 7 from emp 8 group by deptno 9 order by deptno 10 / DEPTNO CLERK SALESMAN MANAGER ANALYST PRESIDENT ---------- ---------- ---------- ---------- ---------- ---------- 10 1300 2450 5000 20 1900 2975 6000 30 950 5600 2850
    62. 66. Pivot ops$tkyte%ORA11GR1> select * 2 from (select deptno, job, sal 3 from emp ) e 4 pivot ( sum(sal) for job in 5 ( 'CLERK', 'SALESMAN', 'MANAGER', 6 'ANALYST', 'PRESIDENT' ) ) 7 order by deptno 8 / DEPTNO 'CLERK' 'SALESMAN' 'MANAGER' 'ANALYST' 'PRESIDENT' ---------- ---------- ---------- ---------- ---------- ----------- 10 1300 2450 5000 20 1900 2975 6000 30 950 5600 2850
    63. 67. #9 Flashback Data Archive
    64. 68. Flashback Data Archive Total Data Recall <ul><li>Tamper-proof data archive </li></ul><ul><li>Efficient storage and retrieval of undo </li></ul><ul><li>Keep data for months, years, decades! </li></ul><ul><li>Fast access to even very old data </li></ul><ul><li>View data, versions of rows as of any time </li></ul><ul><li>Control data retention time, purging of data </li></ul>User Tablespaces Flashback Data Archive Oracle 11g Database Select * from orders AS OF ‘Midnight 31-Dec-2004’ Changes Archive Tables
    65. 69. #10 Finer Grained Dependency Tracking
    66. 70. Finer Grained Dependency Tracking <ul><li>Fewer Invalidations </li></ul><ul><ul><li>Add to a specification – so what </li></ul></ul><ul><ul><li>Add/Drop/Modify a column – so what </li></ul></ul><ul><ul><li>Holds true with view modifications too </li></ul></ul><ul><ul><li>Change a synonym pointer – so what </li></ul></ul><ul><ul><li>Replace a procedure – so what </li></ul></ul>
    67. 71. Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> create or replace package p1 2 as 3 function f return number; 4 end; 5 / Package created. ops$tkyte%ORA10GR2> create or replace package p2 2 as 3 g_global number := p1.f; 4 end; 5 / Package created.
    68. 72. Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> select object_name, status 2 from user_objects 3 where object_name like 'P_'; OBJECT_NAME STATUS ------------------------------ ------- P1 VALID P2 VALID
    69. 73. Finer Grained Dependency Tracking ops$tkyte%ORA 10GR2 > create or replace package p1 2 as 3 function f return number; 4 procedure p; 5 end; 6 / Package created. ops$tkyte%ORA 10GR2 > select object_name, status 2 from user_objects 3 where object_name like 'P_'; OBJECT_NAME STATUS ------------------------------ ------- P1 VALID P2 INVALID
    70. 74. Finer Grained Dependency Tracking ops$tkyte%ORA 11GR1 > create or replace package p1 2 as 3 function f return number; 4 procedure p; 5 end; 6 / Package created. ops$tkyte%ORA 11GR1 > select object_name, status 2 from user_objects 3 where object_name like 'P_'; OBJECT_NAME STATUS ------------------------------ ------- P1 VALID P2 VALID
    71. 75. Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> create table t ( x int, y int ); Table created. ops$tkyte%ORA10GR2> create or replace procedure p 2 as 3 begin 4 for x in ( select x, y from t ) 5 loop 6 null; 7 end loop; 8 end; 9 / Procedure created. ops$tkyte%ORA10GR2> select status from user_objects where object_name = 'P'; STATUS ------- VALID
    72. 76. Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> alter table t add z int; Table altered. ops$tkyte% ORA10GR2 > select status from user_objects where object_name = 'P'; STATUS ------- INVALID ops$tkyte% ORA11GR1 > select status from user_objects where object_name = 'P'; STATUS ------- VALID
    73. 77. Finer Grained Dependency Tracking ops$tkyte%ORA10GR2> alter procedure p compile; Procedure altered. ops$tkyte%ORA10GR2> alter table t drop column z; Table altered. ops$tkyte% ORA10GR2 > select status from user_objects where object_name = 'P'; STATUS ------- INVALID ops$tkyte% ORA11GR1 > select status from user_objects where object_name = 'P'; STATUS ------- VALID
    74. 78. #11 OLTP Table Compression
    75. 79. <ul><li>Oracle 9i compresses data only during bulk load; useful for DW and ILM </li></ul><ul><li>Oracle 11g compresses w/ inserts, updates </li></ul><ul><li>Trade some cpu for disk & i/o efficiency </li></ul><ul><li>Compress large application tables </li></ul><ul><ul><li>Transaction processing, data warehousing </li></ul></ul><ul><li>Compress all data types : structured, unstructured </li></ul><ul><li>Savings cascade to all db copies: test, dev, standby, mirrors, archiving, backup, etc. </li></ul>Oracle Advanced Compression
    76. 80. <Insert Picture Here> A Q &
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×