Foreword |
|
xvii | |
Acknowledgments |
|
xix | |
Introduction |
|
xxi | |
Audience |
|
xxii | |
Organization |
|
xxiii | |
What's on the Companion Web Site? |
|
xxv | |
An Invitation |
|
xxv | |
|
|
1 | (32) |
|
What Is a Data Warehouse? |
|
|
2 | (14) |
|
A Data Warehouse Is Not a Project... |
|
|
3 | (1) |
|
...Rather, Data Warehousing Is a Process |
|
|
4 | (1) |
|
A Data Warehouse Is Not a Product... |
|
|
5 | (4) |
|
...Rather, Data Warehousing Is a New Way of Thinking about Data |
|
|
9 | (5) |
|
A Data Warehouse Is Not a Place... |
|
|
14 | (1) |
|
...Rather, Data Warehousing Is a Supplement to Traditional Data Processing |
|
|
15 | (1) |
|
Inmon's Four Characteristics of a Data Warehouse |
|
|
16 | (9) |
|
|
16 | (2) |
|
|
18 | (1) |
|
|
19 | (2) |
|
|
21 | (4) |
|
What Is an Operational Data Store? |
|
|
25 | (1) |
|
|
26 | (1) |
|
|
27 | (1) |
|
|
28 | (2) |
|
Critical Success Factors in Data Warehousing |
|
|
30 | (1) |
|
|
31 | (2) |
|
Hardware Architectures for Oracle Data Warehousing |
|
|
33 | (46) |
|
|
34 | (32) |
|
|
34 | (1) |
|
|
35 | (10) |
|
|
45 | (4) |
|
Symmetric Multiprocessing (SMP) Systems |
|
|
49 | (4) |
|
Nonuniform Memory Access (NUMA) Systems |
|
|
53 | (4) |
|
|
57 | (4) |
|
Massively Parallel Processing (MPP) Systems |
|
|
61 | (4) |
|
Summary: Computer Architectures |
|
|
65 | (1) |
|
Data Storage Architectures |
|
|
66 | (10) |
|
|
66 | (7) |
|
|
73 | (3) |
|
|
76 | (3) |
|
Oracle Server Software Architecture and Features |
|
|
79 | (66) |
|
Oracle Server: External Architecture |
|
|
80 | (22) |
|
Oracle Database versus Oracle Instance |
|
|
80 | (3) |
|
|
83 | (7) |
|
|
90 | (6) |
|
|
96 | (6) |
|
Oracle Server: Internal Architecture |
|
|
102 | (28) |
|
|
102 | (4) |
|
|
106 | (16) |
|
|
122 | (1) |
|
|
123 | (1) |
|
|
123 | (1) |
|
|
124 | (1) |
|
The Oracle Data Dictionary |
|
|
124 | (1) |
|
|
125 | (5) |
|
|
130 | (7) |
|
|
131 | (1) |
|
|
132 | (1) |
|
|
133 | (1) |
|
|
133 | (2) |
|
|
135 | (1) |
|
Virtual Private Databases |
|
|
135 | (2) |
|
|
137 | (2) |
|
|
139 | (1) |
|
|
140 | (1) |
|
Backup and Recovery Features |
|
|
140 | (2) |
|
|
142 | (1) |
|
|
143 | (2) |
|
Designing the Oracle Data Warehouse |
|
|
145 | (76) |
|
Users Need to Understand the Warehouse Structure and Operation |
|
|
146 | (1) |
|
|
147 | (17) |
|
Recording Warehouse Processing as Metadata |
|
|
149 | (2) |
|
What Metadata Does Oracle Provide? |
|
|
151 | (3) |
|
|
154 | (10) |
|
Introduction to a DW Case Study |
|
|
164 | (3) |
|
|
167 | (3) |
|
Logical Warehouse Schema Design |
|
|
170 | (17) |
|
Detail and Summary Schema |
|
|
170 | (4) |
|
|
174 | (10) |
|
External and Reference Data |
|
|
184 | (1) |
|
Natural Keys versus Artificial Keys |
|
|
184 | (3) |
|
|
187 | (27) |
|
|
187 | (3) |
|
|
190 | (3) |
|
|
193 | (4) |
|
|
197 | (1) |
|
|
198 | (1) |
|
|
199 | (1) |
|
|
200 | (1) |
|
Database Constraints and Triggers |
|
|
200 | (12) |
|
Generating Unique Key Values |
|
|
212 | (2) |
|
Designing for High Availability |
|
|
214 | (5) |
|
What Is High Availability? |
|
|
214 | (1) |
|
|
215 | (1) |
|
Design Techniques for High Availability |
|
|
216 | (3) |
|
Balancing Design Objectives |
|
|
219 | (1) |
|
|
219 | (2) |
|
Building the Oracle Data Warehouse |
|
|
221 | (86) |
|
ETT Tools for Building the Warehouse |
|
|
222 | (3) |
|
Using SQL*Plus to Create the Data Warehouse |
|
|
225 | (15) |
|
Keeping Logs of Your Actions |
|
|
226 | (1) |
|
SQL*Plus Formatting Commands |
|
|
226 | (2) |
|
Passing Values to a Script at Run-Time |
|
|
228 | (2) |
|
Writing Scripts for Execution in Batch |
|
|
230 | (4) |
|
Using SQL to Generate SQL |
|
|
234 | (6) |
|
Creating an Oracle Database for the Data Warehouse |
|
|
240 | (17) |
|
Estimating the Size of the Database |
|
|
241 | (2) |
|
|
243 | (14) |
|
|
257 | (38) |
|
|
257 | (23) |
|
Creating Index-Organized Tables |
|
|
280 | (1) |
|
Creating Temporary Tables |
|
|
281 | (1) |
|
Building Indexes for the Data Warehouse |
|
|
282 | (10) |
|
|
292 | (3) |
|
|
295 | (2) |
|
Using Views in the Data Warehouse |
|
|
297 | (7) |
|
Using Views and DECODE for Complex Analyses |
|
|
298 | (3) |
|
Creating Materialized Views in the Data Warehouse |
|
|
301 | (1) |
|
Views, Materialized Views, or Summary Tables? |
|
|
302 | (2) |
|
Testing the Data Warehouse |
|
|
304 | (2) |
|
|
306 | (1) |
|
Populating the Oracle Data Warehouse |
|
|
307 | (96) |
|
|
309 | (8) |
|
Dealing with Missing Data |
|
|
310 | (2) |
|
Reconciling with ETT Tools |
|
|
312 | (1) |
|
Reconciling during Extract |
|
|
313 | (3) |
|
|
316 | (1) |
|
|
317 | (60) |
|
|
318 | (1) |
|
|
319 | (21) |
|
Using Custom Load Programs |
|
|
340 | (1) |
|
|
341 | (1) |
|
Using Oracle's Gateway Products |
|
|
342 | (1) |
|
Extracting Data from Oracle Sources |
|
|
343 | (34) |
|
Post-Processing of Loaded Data |
|
|
377 | (3) |
|
Validating the Loaded Data |
|
|
378 | (1) |
|
Index Builds and Rebuilds |
|
|
379 | (1) |
|
|
380 | (4) |
|
Purging and Archiving Warehouse Data |
|
|
384 | (16) |
|
Techniques for Archiving Data |
|
|
386 | (3) |
|
|
389 | (3) |
|
Techniques for Purging Data |
|
|
392 | (8) |
|
|
400 | (3) |
|
Post-Load Processing in the Data Warehouse |
|
|
403 | (44) |
|
Tactical versus Strategic |
|
|
404 | (2) |
|
Operational Data Stores and Data Warehouses |
|
|
405 | (1) |
|
|
406 | (6) |
|
Summarization and Aggregation |
|
|
407 | (3) |
|
|
410 | (1) |
|
Merging and Denormalization |
|
|
411 | (1) |
|
Oracle8i Materialized Views |
|
|
412 | (27) |
|
Snapshots and Materialized Views |
|
|
414 | (6) |
|
Guidelines for Creating Materialized Views |
|
|
420 | (5) |
|
|
425 | (7) |
|
|
432 | (7) |
|
Life before Materialized Views |
|
|
439 | (7) |
|
Parallel CREATE TABLE...AS SELECT (pCTAS) |
|
|
440 | (1) |
|
|
440 | (2) |
|
Procedural Code for Complex Logic |
|
|
442 | (4) |
|
|
446 | (1) |
|
Administering and Monitoring the Oracle Data Warehouse |
|
|
447 | (88) |
|
Who Are We? Why Are We Here? |
|
|
449 | (5) |
|
|
450 | (2) |
|
|
452 | (2) |
|
|
454 | (2) |
|
Data Warehouse Administrator (DWA) |
|
|
454 | (1) |
|
Database Administrator (DBA) |
|
|
455 | (1) |
|
|
455 | (1) |
|
|
455 | (1) |
|
|
455 | (1) |
|
Help Desk and Problem Resolution |
|
|
456 | (1) |
|
Data Warehouse Security Issues |
|
|
456 | (7) |
|
|
457 | (1) |
|
|
458 | (1) |
|
|
458 | (2) |
|
More Sophisticated Security Tools and Techniques |
|
|
460 | (3) |
|
Data Warehouse Configuration Issues |
|
|
463 | (45) |
|
Optimal Flexible Architecture (OFA) |
|
|
463 | (4) |
|
Build/Rebuild Documentation and Scripts |
|
|
467 | (1) |
|
Identifying All Inbound Data and Its Sources |
|
|
468 | (1) |
|
|
469 | (2) |
|
Identifying All Outbound Data and Its Destinations |
|
|
471 | (2) |
|
|
473 | (14) |
|
Development, Test, and Training Environments |
|
|
487 | (3) |
|
|
490 | (15) |
|
Enabling and Optimizing Auditing |
|
|
505 | (3) |
|
Configuration Rules of Thumb |
|
|
508 | (6) |
|
Locally Managed Tablespaces |
|
|
508 | (1) |
|
|
509 | (1) |
|
|
510 | (1) |
|
Rollback Segments and the RBS Tablespace |
|
|
511 | (1) |
|
|
512 | (1) |
|
Setting ``init.ora'' Initialization Parameters |
|
|
513 | (1) |
|
|
513 | (1) |
|
Monitoring Rules of Thumb |
|
|
514 | (19) |
|
Monitoring the ``Worst'' SQL Statements |
|
|
514 | (2) |
|
Monitoring the Top Consumers in the Operating System |
|
|
516 | (2) |
|
Monitoring Configurable Resources |
|
|
518 | (1) |
|
Monitoring the AUDIT Session Statistics |
|
|
518 | (1) |
|
Monitoring Rollback Segment Contention |
|
|
519 | (2) |
|
Monitoring Latch Contention and Locking |
|
|
521 | (5) |
|
Monitoring the Number of Extents |
|
|
526 | (2) |
|
|
528 | (1) |
|
Monitoring Tablespace Fragmentation |
|
|
528 | (3) |
|
Monitoring Invalid Compiled Objects |
|
|
531 | (1) |
|
Monitoring ``Stale'' Optimizer Statistics |
|
|
532 | (1) |
|
|
533 | (2) |
|
Data Warehouse Performance Tuning |
|
|
535 | (80) |
|
|
537 | (1) |
|
Setting Up the I/O Subsystem |
|
|
538 | (7) |
|
Pretuning the Data Warehouse |
|
|
545 | (4) |
|
|
546 | (2) |
|
|
548 | (1) |
|
Optimizing the Load Phase |
|
|
549 | (13) |
|
SQL*Loader Direct Path versus ``Conventional SQL'' |
|
|
550 | (5) |
|
|
555 | (1) |
|
Drop and Re-Create Indexes for Large-Volume Loads |
|
|
556 | (1) |
|
Constraints in the Data Warehouse |
|
|
557 | (1) |
|
Pipelining Instead of ``Staging'' Flat Files |
|
|
558 | (2) |
|
Range Partitioning to publish New Data |
|
|
560 | (1) |
|
Range Partitioning to archive or purge Old Data |
|
|
561 | (1) |
|
|
562 | (27) |
|
Understanding SQL Tracing |
|
|
563 | (10) |
|
Formatting a SQL Tuning Report with TKPROF |
|
|
573 | (16) |
|
|
589 | (25) |
|
|
590 | (24) |
|
|
614 | (1) |
|
Parallel Execution in the Oracle Data Warehouse |
|
|
615 | (62) |
|
What Is Oracle Parallel Execution? |
|
|
615 | (2) |
|
When Are Parallel Operations Useful? |
|
|
617 | (2) |
|
|
619 | (24) |
|
|
622 | (9) |
|
Performing the Partitioning |
|
|
631 | (2) |
|
Recruiting Parallel Query Slaves |
|
|
633 | (6) |
|
|
639 | (2) |
|
Receiving and Collating the Results |
|
|
641 | (2) |
|
Parallel Direct-Path SQL*Loader |
|
|
643 | (3) |
|
Parallel Create Index (pCI) |
|
|
646 | (3) |
|
|
649 | (2) |
|
Parallel Create Table...As Select (pCTAS) |
|
|
651 | (9) |
|
Extent Trimming in Oracle |
|
|
660 | (5) |
|
Parallel Indexed Queries on Partitioned Tables |
|
|
665 | (1) |
|
|
666 | (6) |
|
|
667 | (1) |
|
|
668 | (3) |
|
Parallel Update and Delete |
|
|
671 | (1) |
|
|
672 | (3) |
|
Parallel Alter Index...Rebuild |
|
|
672 | (1) |
|
|
673 | (1) |
|
|
673 | (1) |
|
|
673 | (1) |
|
Parallel Alter Table...Move |
|
|
674 | (1) |
|
Parallel Alter Table...Move Online |
|
|
674 | (1) |
|
Parallel Alter Index...Rebuild Partition |
|
|
674 | (1) |
|
Parallel Alter Index...Rebuild Subpartition |
|
|
674 | (1) |
|
Parallel Alter Index...Rebuild Online |
|
|
674 | (1) |
|
Parallel Statistics Gathering |
|
|
675 | (1) |
|
|
675 | (2) |
|
Warehousing with Oracle Parallel Server |
|
|
677 | (74) |
|
What Is Oracle Parallel Server? |
|
|
678 | (3) |
|
Parallel Server versus Distributed Databases |
|
|
681 | (1) |
|
Again, What Is Parallel Server? |
|
|
682 | (12) |
|
File Cabinets and File Clerks |
|
|
683 | (5) |
|
Extending the Analogy to Include Parallel Server |
|
|
688 | (6) |
|
|
694 | (11) |
|
Benefit: Performance and Capacity Scaleup |
|
|
694 | (1) |
|
Benefit: Higher Availability |
|
|
695 | (3) |
|
Benefit: Performance Speedup |
|
|
698 | (1) |
|
Cost: Greater Management Complexity |
|
|
699 | (2) |
|
Cost: Not Transparent to Some Applications |
|
|
701 | (4) |
|
Load Segregation Using Data Routing |
|
|
705 | (3) |
|
Randomly Segregating Load |
|
|
708 | (3) |
|
|
711 | (3) |
|
Administering Parallel Server |
|
|
714 | (3) |
|
Installing and Linking in the Parallel Server Option (Required) |
|
|
714 | (1) |
|
Separate Threads of Redo Log Files (Required) |
|
|
715 | (2) |
|
Optimizing Parallel Server for Data Warehouses |
|
|
717 | (33) |
|
Initialization Parameters |
|
|
717 | (8) |
|
Detecting Contention Specific to Parallel Server |
|
|
725 | (7) |
|
Reducing Enqueue Processing by Disabling ``Table Locks'' |
|
|
732 | (3) |
|
Reducing Enqueue Processing with Locally Managed Tablespaces |
|
|
735 | (2) |
|
Optimizing Redo Log Files in Parallel Server |
|
|
737 | (2) |
|
Optimizing Rollback Segments in Parallel Server |
|
|
739 | (2) |
|
Optimizing Sorting in Parallel Server |
|
|
741 | (2) |
|
Optimizing Data Loading in Parallel Server |
|
|
743 | (7) |
|
|
750 | (1) |
|
Distributing the Oracle Data Warehouse |
|
|
751 | (44) |
|
Reasons to Consider a Distributed Data Warehouse |
|
|
752 | (4) |
|
|
752 | (1) |
|
|
753 | (3) |
|
Distributed Database Terminology |
|
|
756 | (7) |
|
|
757 | (1) |
|
|
757 | (2) |
|
|
759 | (1) |
|
|
760 | (1) |
|
|
761 | (2) |
|
Oracle Distributed Database Technology |
|
|
763 | (14) |
|
|
763 | (2) |
|
|
765 | (1) |
|
|
765 | (2) |
|
Gateways or ``Heterogenous Services'' |
|
|
767 | (1) |
|
Oracle Replication Facilities |
|
|
768 | (9) |
|
Alternative Distributed Architectures |
|
|
777 | (17) |
|
|
777 | (2) |
|
Distributed Data Warehouse |
|
|
779 | (11) |
|
Replicated Data Warehouse |
|
|
790 | (4) |
|
|
794 | (1) |
|
Analytical Processing in the Oracle Data Warehouse |
|
|
795 | (70) |
|
|
796 | (1) |
|
Analytical Functions in Oracle SQL |
|
|
797 | (9) |
|
ROLLUP Extension to GROUP BY |
|
|
798 | (2) |
|
CUBE Extension to GROUP BY |
|
|
800 | (1) |
|
|
800 | (2) |
|
|
802 | (4) |
|
Browsing and Ad Hoc Reporting |
|
|
806 | (3) |
|
|
807 | (2) |
|
Online Analytical Processing |
|
|
809 | (1) |
|
|
809 | (3) |
|
|
812 | (5) |
|
|
812 | (2) |
|
|
814 | (1) |
|
|
814 | (3) |
|
The History of Oracle Express |
|
|
817 | (1) |
|
The Technology of Oracle Express |
|
|
818 | (4) |
|
|
819 | (1) |
|
|
820 | (1) |
|
|
820 | (1) |
|
|
820 | (1) |
|
|
820 | (2) |
|
Application Architectures |
|
|
822 | (7) |
|
Data Distribution Architectures |
|
|
822 | (3) |
|
Load and Storage Strategy |
|
|
825 | (4) |
|
Implementing an OLAP Solution |
|
|
829 | (17) |
|
|
829 | (3) |
|
|
832 | (3) |
|
|
835 | (11) |
|
Data Loading and Integration with External Systems |
|
|
846 | (8) |
|
|
847 | (2) |
|
|
849 | (5) |
|
Performance Issues and Tuning |
|
|
854 | (5) |
|
Gathering Information to Help Tune |
|
|
855 | (3) |
|
Express NT Server Configuration Manager Settings |
|
|
858 | (1) |
|
|
859 | (5) |
|
The Oracle Express Applications |
|
|
860 | (1) |
|
Relational Access Manager/Administrator |
|
|
861 | (1) |
|
Oracle Express Objects and Express Analyzer |
|
|
862 | (1) |
|
|
863 | (1) |
|
|
863 | (1) |
|
|
864 | (1) |
Index |
|
865 | |