Tải bản đầy đủ (.pdf) (1,348 trang)

oracle database 10g - the complete reference 2004

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.57 MB, 1,348 trang )

Oracle Database 10
g
:
The Complete Reference
Kevin Loney
McGraw-Hill/Osborne
New York Chicago San Francisco
Lisbon London Madrid Mexico City Milan
New Delhi San Juan Seoul Singapore Sydney Toronto
McGraw-Hill/Osborne
2100 Powell Street, 10th Floor
Emeryville, California 94608
U.S.A.
To arrange bulk purchase discounts for sales promotions, premiums, or fund-raisers, please contact
McGraw-Hill/Osborne at the above address. For information on translations or book distributors outside the
U.S.A., please see the International Contact Information page immediately following the index of this book.
Oracle Database 10
g
: The Complete Reference
Copyright © 2004 by The McGraw-Hill Companies, Inc. (Publisher). All rights reserved. Printed in the
United States of America. Except as permitted under the Copyright Act of 1976, no part of this publication
may be reproduced or distributed in any form or by any means, or stored in a database or retrieval system,
without the prior written permission of Publisher.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Screen displays of copyrighted Oracle software programs have been reproduced herein with the permission
of Oracle Corporation and/or its affiliates.
Excerpts of copyrighted Oracle user documentation have been reproduced herein with the permission of
Oracle Corporation and/or its affiliates.
1234567890 CUS CUS 01987654
Book p/n 0-07-225352-5 and CD p/n 0-07-225353-3
parts of


ISBN 0-07-225351-7
Publisher
Brandon A. Nordin
Vice President & Associate Publisher
Scott Rogers
Acquisitions Editor
Lisa McClain
Project Editors
Patty Mon, Janet Walden
Acquisitions Coordinator
Athena Honore
Technical Editor
Pete Sharman
Copy Editors
Bart Reed, Margaret Berson, William F. McManus
Proofreader
Carol Henry
Indexer
Jack Lewis
Computer Designer
Apollo Publishing Services
Cover Series Design
Damore Johann Design, Inc.
This book was composed with Corel VENTURA™ Publisher.
Information has been obtained by Publisher from sources believed to be reliable. However, because of the possibility of human or mechanical
error by our sources, Publisher, or others, Publisher does not guarantee to the accuracy, adequacy, or completeness of any information included
in this work and is not responsible for any errors or omissions or the results obtained from the use of such information.
Oracle Corporation does not make any representations or warranties as to the accuracy, adequacy, or completeness of any information
contained in this Work, and is not responsible for any errors or omissions.
To my parents, and to Sue, Emily, Rachel, and Jane.

About the Author
Kevin Loney is a senior technical management consultant with
TUSC (), an Oracle-focused consultancy
headquartered in Chicago. He was selected as
ORACLE Magazine
’s
Consultant of the Year in 2002. He is an expert in the design,
development, administration, tuning, security, and recovery of
Oracle-based applications. An Oracle DBA and developer since
1987, he is the primary author of 15 books for Oracle DBAs and
developers. He is a frequent and highly-rated presenter at local
and international Oracle user groups.
About the Technical Reviewers
Pete Sharman has 16 years’ IT experience designing, implementing,
and managing the performance of Oracle solutions. As a solo
consultant and team leader, Pete has provided administrative and
technical leadership to leading Internet-based businesses as well
as several Fortune 100 and Fortune 500 companies. He has also
completed world-class benchmarks and implementation reviews
of the Oracle RDBMS, and performed high-impact performance
tuning. A proven technical leader, Pete has acquired expert-level
skills in Oracle Parallel Server and Real Application Clusters database
design, administration, backup and recovery, operations planning
and management, performance management, system management,
and security and management of complex data centers.
Currently, Pete is performing the role of Oracle9
i
and Oracle 10
g
Database Global Consulting Lead, acting as an interface between

Oracle Development and North America Sales and Consulting.
Pete has also passed all the Oracle DBA Certifications (Oracle7,
Oracle8, Oracle8
i,
and Oracle9
i
) and was one of the first 20 people
in the world to qualify as an Oracle9
i
Certified Master.
Bob Bryla is an Oracle 8, 8
i,
9
i,
and 10
g
Certified Professional with
more than 15 years of experience in database design, database
application development, training, and database administration,
and he is the tech editor and author of several Oracle Press and
Sybex Oracle DBA books. He is an Internet database analyst and
Oracle DBA at Lands’ End, Inc., in Dodgeville, Wisconsin.
Contents
ACKNOWLEDGEMENTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
PART I
Critical Database Concepts
1 Oracle Database 10
g
Architecture Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Databases and Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Inside the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Choosing Architectures and Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Installing Oracle Database 10
g
and Creating a Database . . . . . . . . . . . . . . . . . . . . . 11
Overview of Licensing and Installation Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Upgrading to Oracle Database 10
g
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Choosing an Upgrade Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Before Upgrading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Using the Database Upgrade Assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Performing a Manual Direct Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Using Export and Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Using the Data-Copying Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
After Upgrading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4 Planning Oracle Applications—Approaches, Risks, and Standards . . . . . . . . . . . . . . 37
The Cooperative Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Everyone Has “Data” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
The Familiar Language of Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Some Common, Everyday Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
What Are the Risks? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
The Importance of the New Vision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
How to Reduce the Confusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Capitalization in Names and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Normalizing Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Good Design Has a Human Touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Understanding the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Toward Object Name Normalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

v
vi
Oracle Database 10
g
: The Complete Reference
Intelligent Keys and Column Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
The Commandments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
PART II
SQL and SQL*Plus
5 The Basic Parts of Speech in SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Creating the NEWSPAPER Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Using SQL to Select Data from Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
select, from, where, and order by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Logic and Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Another Use for where: Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Combining Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Creating a View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6 Basic SQL*Plus Reports and Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Building a Simple Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Other Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Checking the SQL*Plus Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Building Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7 Getting Text Information and Changing It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
What Is a String? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Concatenation ( || ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
How to Cut and Paste Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Using order by and where with String Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8 Searching for Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Search Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
REGEXP_SUBSTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9 Playing the Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
The Three Classes of Number Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Single-Value Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Aggregate Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
List Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Finding Rows with MAX or MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Precedence and Parentheses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
10 Dates: Then, Now, and the Difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Date Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
ROUND and TRUNC in Date Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Contents
vii
TO_DATE and TO_CHAR Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Dates in where Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Dealing with Multiple Centuries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Using the EXTRACT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Using the TIMESTAMP Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
11 Conversion and Transformation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Elementary Conversion Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Specialized Conversion Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Transformation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
12 Grouping Things Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
The Use of group by and having . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Views of Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
The Power of Views of Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
More Grouping Possibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
13 When One Query Depends upon Another . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Advanced Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Outer Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Natural and Inner Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
UNION, INTERSECT, and MINUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
14 Some Complex Possibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Complex Groupings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Using Temporary Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Using ROLLUP, GROUPING, and CUBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Family Trees and connect by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
15 Changing Data: insert, update, merge, and delete . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
rollback, commit, and autocommit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Multitable Inserts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Using the merge Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
16 DECODE and CASE: if, then, and else in SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
if, then, else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Replacing Values via DECODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
DECODE Within DECODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Greater Than and Less Than in DECODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Using CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
17 Creating and Managing Tables, Views, Indexes, Clusters, and Sequences . . . . . . . . . 311
Creating a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Dropping Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Altering Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Creating a Table from a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Creating an Index-Organized Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Using Partitioned Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Creating a View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
18 Basic Oracle Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Users, Roles, and Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
What Users Can Grant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Granting Limited Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
PART III
Beyond the Basics
19 Advanced Security—Virtual Private Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Initial Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Create an Application Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Create a Logon Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Create a Security Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Apply the Security Policy to Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Test VPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
How to Implement Column-Level VPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
How to Disable VPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
How to Use Policy Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
20 Working with Tablespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Tablespaces and the Structure of the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Planning Your Tablespace Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
21 Using SQL*Loader to Load Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
The Control File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Starting the Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Control File Syntax Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

Managing Data Loads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Tuning Data Loads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Additional Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
22 Using Data Pump Export and Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Creating a Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Data Pump Export Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Starting a Data Pump Export Job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Data Pump Import Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Starting a Data Pump Import Job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
23 Accessing Remote Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Database Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Using Synonyms for Location Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
viii
Oracle Database 10
g
: The Complete Reference
Using the User Pseudo-Column in Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Dynamic Links: Using the SQL*Plus copy Command . . . . . . . . . . . . . . . . . . . . . . . . 434
Connecting to a Remote Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
24 Using Materialized Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Required System Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Required Table Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Read-Only vs. Updatable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
create materialized view Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Using Materialized Views to Alter Query Execution Paths . . . . . . . . . . . . . . . . . . . . . 445
Using DBMS_ADVISOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Refreshing Materialized Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
create materialized view log Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Altering Materialized Views and Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

Dropping Materialized Views and Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
25 Using Oracle Text for Text Searches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Adding Text to the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Text Queries and Text Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Index Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
26 Using External Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Accessing the External Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
Creating an External Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Altering External Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Limitations, Benefits, and Potential Uses of External Tables . . . . . . . . . . . . . . . . . . . . 490
27 Using Flashback Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Time-Based Flashback Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Saving the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
SCN-Based Flashback Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
What If the Flashback Query Fails? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
What SCN Is Associated with Each Row? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Flashback Version Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Planning for Flashbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
28 Flashback—Tables and Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
The flashback table Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
The flashback database Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
PART IV
PL/SQL
29 An Introduction to PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
PL/SQL Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Declarations Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Executable Commands Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Exception Handling Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Contents
ix

x
Oracle Database 10
g
: The Complete Reference
30 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Required System Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Required Table Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Types of Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Trigger Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
Enabling and Disabling Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Replacing Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Dropping Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
31 Procedures, Functions, and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Required System Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Required Table Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Procedures vs. Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Procedures vs. Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
create procedure Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
create function Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
create package Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Viewing Source Code for Procedural Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
Compiling Procedures, Functions, and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
Replacing Procedures, Functions, and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Dropping Procedures, Functions, and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
32 Using Native Dynamic SQL and DBMS_SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Using EXECUTE IMMEDIATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Using Bind Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Using DBMS_SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
PART V
Object-Relational Databases

33 Implementing Types, Object Views, and Methods . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Working with Abstract Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Implementing Object Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
34 Collectors (Nested Tables and Varying Arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
Varying Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Nested Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Additional Functions for Nested Tables and Varying Arrays . . . . . . . . . . . . . . . . . . . . 615
Management Issues for Nested Tables and Varying Arrays . . . . . . . . . . . . . . . . . . . . . 615
35 Using Large Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Available Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
Specifying Storage for LOB Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Manipulating and Selecting LOB Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
Contents
xi
Row Objects vs. Column Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Object Tables and OIDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Object Views with REFs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
Object PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Objects in the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
PART VI
Java in Oracle
37 An Introduction to Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
Java vs. PL/SQL: An Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Executable Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
38 JDBC Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

Using the JDBC Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
39 Java Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
Loading the Class into the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
How to Access the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
PART VII
Clustered Oracle—The Grid
40 Oracle Real Application Clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Preinstallation Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Installing RAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Starting and Stopping RAC Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
Transparent Application Failover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Adding Nodes and Instances to the Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Managing the Cluster Registry and Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
41 Grid Architecture and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Hardware and Operating System Configuration Issues . . . . . . . . . . . . . . . . . . . . . . . . 720
Adding Servers to the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
Sharing Data Across the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
Managing the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
Launching OEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
36 Advanced Object-Oriented Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
A Note About Nomenclature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732
New Views Introduced in Oracle Database 10
g . . . . . . . . . . . . . . . . . . . . . . . . . . . .
733
New Columns Introduced in Oracle Database 10
g . . . . . . . . . . . . . . . . . . . . . . . . . .
738
The Road Maps: DICTIONARY (DICT) and DICT_COLUMNS . . . . . . . . . . . . . . . . . . 745
Things You Select From: Tables (and Columns), Views, Synonyms, and Sequences . . 746
Recycle Bin—USER_RECYCLEBIN and DBA_RECYCLEBIN . . . . . . . . . . . . . . . . . . . . 755

Constraints and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Abstract Datatypes, ORDBMS-Related Structures, and LOBs . . . . . . . . . . . . . . . . . . . 764
Database Links and Materialized Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Triggers, Procedures, Functions, and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
Space Allocation and Usage, Including Partitions and Subpartitions . . . . . . . . . . . . . 774
Users and Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
Monitoring: The V$ Dynamic Performance Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
43 The Hitchhiker’s Guide to Tuning Applications and SQL . . . . . . . . . . . . . . . . . . . . . 791
New Tuning Features in Oracle Database 10
g
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Tuning—Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
Generating and Reading Explain Plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
Major Operations Within Explain Plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Implementing Stored Outlines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
44 Case Studies in Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
Case Study 1: Waits, Waits, and More Waits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
Case Study 2: Application-Killing Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Case Study 3: Long-Running Batch Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
45 The Hitchhiker’s Guide to Oracle Application Server 10
g
. . . . . . . . . . . . . . . . . . . . 845
What Is Oracle Application Server 10
g
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847

Communication Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Content Management Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Business Logic Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Presentation Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
Business Intelligence Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
Portal Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
Developer Toolkits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
Persistence Layer Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
Caching Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
System Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
xii
Oracle Database 10
g
: The Complete Reference
PART VIII
Hitchhiker’s Guides
42 The Hitchhiker’s Guide to the Oracle10
g
Data Dictionary . . . . . . . . . . . . . . . . . . . . 731
Starting and Stopping the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
Sizing and Managing Memory Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Allocating and Managing Space for the Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
Monitoring an Undo Tablespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
Automating Storage Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
Segment Space Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
Transporting Tablespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
Performing Backups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
Where to Go from Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919

47 The Hitchhiker’s Guide to XML in Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
Document Type Definitions, Elements, and Attributes . . . . . . . . . . . . . . . . . . . . . . . . 922
XML Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Using XSU to Select, Insert, Update, and Delete XML Values . . . . . . . . . . . . . . . . . . 928
Using XMLType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Other Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936
Alphabetical Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
Contents
xiii
46 The Hitchhiker’s Guide to Database Administration . . . . . . . . . . . . . . . . . . . . . . . . . 885
Creating a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886

Acknowledgments
This book is dedicated to my family. Thank you for your patience, support, and love.
This book is the product of many hands, and countless hours from many people. My thanks go
out to all those who helped, whether through their comments, feedback, edits, or suggestions.
For additional information about the book, see the publisher’s site ()
and my site (). Additional articles and presentations can be found
on the company site at .
■ To the contributors and reviewers at TUSC, including Chris Ostrowski, Brad Brown,
and Shaun O’Brien.
■ To the management, including Rich Niemiec, Joe Trezzo, Brad Brown, and others for
their dedication to the Oracle user community and their commitment to establishing
and following best practices.
■ To my peers at TUSC, including Bill Callahan, Patrick Callahan, Tony Catalano, Holly
Clawson, Judy Corley, Mike Killough, Randy Swanson, Bob Taylor, Bob Yingst, and
many others for their insights and contributions.
Thanks to my colleagues and friends, including Eyal Aronoff, Steve Bobrowski, Rachel
Carmichael, Steven Feuerstein, Mike McDonnell, Vinny Smith, Susan St. Claire, and Marlene
Theriault. This book has benefited from the knowledge they have shared, and I have benefited

from their friendship and guidance.
Thanks to the folks at McGraw-Hill/Osborne who guided this product through its stages: Scott
Rogers, Athena Honore, Lisa McClain, Patty Mon, Bart Reed, Margaret Berson, Bill McManus, and
the others at Osborne with whom I never directly worked. Thanks to the reviewers, including
Pete Sharman and Bob Bryla (who also contributed material). Thanks also to the Oracle component
of Oracle Press. This book would not have been possible without the earlier excellent work of
George Koch and Robert Muller.
Thanks to the writers and friends along the way: Jerry Gross, Jan Riess, Robert Meissner, Marie
Paretti, Br. Declan Kane, CFX, Br. William Griffin, CFX, Chris O’Neill, Cheryl Bittner, Bill Fleming,
and the FSOUG board.
Special thanks to Sue, Emily, Rachel, Jane, and the rest of the home team. As always, this has
been a joint effort.
—Kevin Loney
xv

Introduction
Oracle documentation is thoroughgoing and voluminous, currently spanning multiple CDs.
Oracle Database 10
g
: The Complete Reference
is the first entity that has gathered all the major Oracle
definitions, commands, functions, features, and products together in a single, massive core reference—
one volume that every Oracle user and developer can keep handy on his or her desk.
The audience for this book will usually fall into one of three categories:

An Oracle end user Oracle can easily be used for simple operations such as entering
data and running standard reports. But such an approach would ignore its great power;
it would be like buying a high-performance racing car and then pulling it around with a
horse. With the introduction provided in the first two sections of this book, even an end
user with little or no data processing background can become a proficient Oracle user—

generating ad hoc, English-language reports, guiding developers in the creation of new
features and functions, and improving the speed and accuracy of the real work done in
a business. The language of the book is simple, clear English without data processing
jargon, and with few assumptions about previous knowledge of computers or databases.
It will help beginners to become experts with an easy-to-follow format and numerous
real examples.

A developer who is new to Oracle With as many volumes of documentation as Oracle
provides, finding a key command or concept can be a time-consuming effort. This book
attempts to provide a more organized and efficient manner of learning the essentials of
the product. The format coaches a developer new to Oracle quickly through the basic
concepts, covers areas of common difficulty, examines misunderstandings of the product
and relational development, and sets clear guidelines for effective application building.

An experienced Oracle developer As with any product of great breadth and sophistication,
there are important issues about which little, if anything, has been published. Knowledge
comes through long experience, but is often not transferred to others. This book delves
deeply into many such subject areas (including new features such as the flashback options,
Data Pump, and many others). The text also reveals many common misconceptions and
suggests rigorous guidelines for application development and designing for performance
issues.
xvii
In Chapter 1, you will see a roadmap to the organization of this book. Briefly, the first part
of the book focuses on installing Oracle, upgrading from prior versions of Oracle, and reviewing
new features introduced with the latest version. The following sections provide guidance on the
technologies you use to exploit Oracle’s capabilities—SQL, PL/SQL, dynamic SQL, object-relational
features, Java, and more. The chapters progress from basic information on SQL to detailed examples
of complex programs.
The final two parts of the book contain the “hitchhiker’s guides”—guided tours of the data
dictionary, optimizer, tuning case studies, the application server, database administration, and

XML—and the Alphabetical Reference. The Alphabetical Reference contains the syntax and
description of all functions and commands supported by Oracle Database 10
g.
The reference
is intended for use by both developers and users of Oracle but assumes some familiarity with
the products.
xviii
Oracle Database 10
g
: The Complete Reference
PART
I
Critical Database
Concepts

CHAPTER
1
Oracle Database 10
g
Architecture Options
4
Part I: Critical Architecture Concepts
O
racle Database 10
g
is a significant upgrade from prior releases of Oracle. New
features give developers, database administrators, and end users greater control
over the storage, processing, and retrieval of their data. In this chapter, you will
see highlights of the Oracle Database 10
g

architecture. You will see detailed
discussions of new features such as regular expression support, flashback
version queries, and Data Pump in later chapters. The goal of this chapter is to present a high-
level overview of the capabilities you can feature in your Oracle applications and provide an
introduction to the chapters that describe them.
This book is divided into nine major sections.
In Part I, “Critical Database Concepts,” you will see an overview of Oracle Database 10
g
’s
options, how to install the Oracle software, how to create or upgrade a database, and advice on
planning your application implementation. These chapters establish the common vocabulary that
both end users and developers can use to coherently and intelligently share concepts and ensure the
success of any development effort. This introductory chapter and Chapter 4 are intended for both
developers and end users of Oracle; Chapters 2 and 3 are intended for database administrators.
Part II, “SQL and SQL*Plus,” teaches the theory and techniques of relational database systems
and applications, including SQL (Structured Query Language) and SQL*Plus. The section begins
with relatively few assumptions about data-processing knowledge on the part of the reader and
then advances, step by step, through some very deep issues and complex techniques. The method
very consciously uses clear, conversational English, with unique and interesting examples, and
strictly avoids the use of undefined terms or jargon. This section is aimed primarily at developers
and end users who are new to Oracle or need a quick review of certain Oracle features. It moves
step by step through the basic capabilities of SQL and Oracle’s interactive query facility, SQL*Plus.
When you’ve completed this section, you should have a thorough understanding of all SQL
keywords, functions, and operators. Within an Oracle database, you should be able to produce
complex queries, create tables, and insert, update, and delete data.
Part III, “Beyond the Basics,” covers advanced options, including virtual private databases,
Data Pump, replication, text indexing, external tables, and the use of the flashback options for
developers and database administrators. Most of the features described in this section will not
be directly used by end users, but the applications they use can be based on these features.
Part IV, “PL/SQL,” provides coverage of PL/SQL. The topics include a review of PL/SQL structures,

plus triggers, stored procedures, and packages. Both standard and native dynamic PL/SQL is covered.
Part V, “Object-Relational Databases,” provides extensive coverage of object-oriented features
such as abstract datatypes, methods, object views, object tables, nested tables, varying arrays, and
large objects.
Part VI, “Java in Oracle,” provides coverage of the Java features in the Oracle database. This
section includes an overview of Java syntax as well as chapters on JDBC and Java stored procedures.
Part VII, “Clustered Oracle—The Grid,” provides an overview of the Real Application Cluster
and grid architecture available in Oracle Database 10
g.
Part VIII contains several “hitchhiker’s” guides—to the data dictionary, the database optimizer,
Oracle Application Server, database administration, and Oracle’s XML implementation. These
guides provide an overview of areas that developers may need to use in their application
development and administration.
Part IX, the “Alphabetical Reference,” is a reference for the Oracle server—a book unto itself.
Reading the introductory pages to this reference will make its use much more effective and
understandable. This section contains references for most major Oracle commands, keywords,
products, features, and functions, with extensive cross-referencing of topics. The reference is
intended for use by both developers and users of Oracle but assumes some familiarity with the
products. To make the most productive use of any of the entries, it’s worthwhile to read the
introductory pages of the reference. These pages explain in greater detail what is and is not
included and how to read the entries.
The CD that accompanies this book contains a special electronic edition of
Oracle Database 10
g
:
The Complete Reference
. Now, with this electronic version, you can easily store all the valuable
information contained in the book on your PC while the print version of the book remains in your
office or home. The CD also contains the table-creation statements and row insertions for all the
tables used in this book. For anyone learning Oracle, having these tables available on your own

Oracle ID, or on a practice ID, will make trying or expanding on the examples very easy.
Databases and Instances
An Oracle database is a collection of data in one or more files. The database contains physical
and logical structures. In the course of developing an application, you create structures such as
tables and indexes to store rows and speed their retrieval. You can create synonyms for the object
names, view objects in different databases (across database links), and you can restrict access to
the objects. You can even use
external tables
to access files outside the database as if the rows
in the files were rows in tables. In this book, you will see how to create these objects and develop
applications based on them.
An Oracle
instance
comprises a memory area called the
System Global Area
(
SGA)
and the
background processes that interact between the SGA and the database files on disk. In an Oracle
Real Application Cluster (RAC), more than one instance will use the same database (see Chapter 40).
The instances generally are on separate servers connected by a high-speed interconnect.
Inside the Database
Within the Oracle database, the basic structure is a table. Oracle Database 10
g
supports many types
of tables, including the following:

Relational tables Using the Oracle-supplied datatypes (see “Datatypes” in the
Alphabetical Reference), you can create tables to store the rows inserted and manipulated
by your applications. Tables have column definitions, and you can add or drop columns

as the application requirements change. Tables are created via the create table command.

Object-relational tables To take advantage of features such as type inheritance, you
can use Oracle’s object-relational capabilities. You can define your own datatypes and
then use them as the basis for column definitions, object tables, nested tables, varying
arrays, and more. See Part V of this book.

Index-organized tables You can create a table that stores its data within an index
structure, allowing the data to be sorted within the table. See Chapter 17.

External tables Data stored in flat files may be treated as a table that users can query
directly and join to other tables in queries. You can use external tables to access large
volumes of data without ever loading them into your database. See Chapter 26. Note
that Oracle also supports BFILE datatypes, a pointer to an external binary file. Before
creating a BFILE or an external table, you must create a directory alias within Oracle
Chapter 1: Oracle Database 10
g
Architecture Options
5
(via the create directory command) pointing to the physical location of the file. See
Chapter 35 for details on BFILEs and other large object datatypes.

Partitioned tables You can divide a table into multiple partitions, which allows you
to separately manage each part of the table. You can add new partitions to a table, split
existing partitions, and administer a partition apart from the other partitions of the table.
Partitioning may simplify or improve the performance of maintenance activities and user
queries. You can partition tables on ranges of values, on lists of values, on hashes of
column values, or on combinations of those options. See Chapter 17.

Materialized views A materialized view is a replica of data retrieved by a query. User

queries may be redirected to the materialized views to avoid large tables during execution—
the optimizer will rewrite the queries automatically. You can establish and manage refresh
schedules to keep the data in the materialized views fresh enough for the business needs.
See Chapter 24.

Temporary tables You can use the create global temporary table command to create
a table in which multiple users can insert rows. Each user sees only his or her rows in
the table. See Chapter 14.

Clustered tables If two tables are commonly queried together, you can physically store
them together via a structure called a
cluster.
See Chapter 17.

Dropped tables As of Oracle Database 10
g,
you can quickly recover dropped tables
via the flashback table to before drop command. You can flash back multiple tables at
once or flash back the entire database to a prior point in time. Oracle supports
flashback
queries,
which return earlier versions of rows from an existing table.
To support access to tables, you can use views that perform joins and aggregations, limit the
rows returned, or alter the columns displayed. Views may be read-only or updatable, and they
can reference local or remote tables. Remote tables can be accessed via database links. You can
use synonyms to mask the physical location of the tables. See Chapter 23 for details on database
links, and Chapter 17 for details on views and synonyms.
To tune the accesses to these tables, Oracle supports many types of indexes, including the
following:


B*-tree indexes A B*-tree index is the standard type of index available in Oracle, and
it’s very useful for selecting rows that meet an equivalence criteria or a range criteria.
Indexes are created via the create index command.

Bitmap indexes For columns that have few unique values, a bitmap index may be able
to improve query performance. Bitmap indexes should only be used when the data is
batch loaded (as in many data warehousing or reporting applications).

Reverse key indexes If there are I/O contention issues during the inserts of sequential
values, Oracle can dynamically reverse the indexed values prior to storing them.

Function-based indexes Instead of indexing a column, such as Name, you can index
a function-based column, such as UPPER(Name). The function-based index gives the
Oracle optimizer additional options when selecting an execution path.
6
Part I: Critical Architecture Concepts

Partitioned indexes You can partition indexes to support partitioned tables or to simplify
the index management. Index partitions can be local to table partitions or may globally
apply to all rows in the table.

Text indexes You can index text values to support enhanced searching capabilities,
such as expanding word stems or searching for phrases. Text indexes are sets of tables
and indexes maintained by Oracle to support complex text-searching requirements.
Oracle Database 10
g
offers enhancements to text indexes that simplify their administration
and maintenance.
See Chapters 17 and 43 for further details on the index types listed here (excluding text indexes).
For text indexes, see Chapter 25.

Storing the Data
All of these logical structures in the database must be stored somewhere in the database. Oracle
maintains a data dictionary (see Chapter 42) that records
metadata
about each object—the object
owner, a definition, related privileges, and so on. For objects that require physical storage space
of their own, Oracle will allocate space within a
tablespace
.
Tablespaces
A tablespace consists of one or more datafiles; a datafile can be a part of one and only one tablespace.
Oracle Database 10
g
creates at least two tablespaces for each database—SYSTEM and SYSAUX—to
support its internal management needs. You can use Oracle managed files (OMF) to simplify the
creation and maintenance of datafiles.
As of Oracle Database 10
g
, you can create a special kind of tablespace, called a
bigfile
tablespace, that can be many thousands of terabytes in size. Along with OMF, the management of
bigfiles makes tablespace management completely transparent to the DBA; the DBA can manage
the tablespace as a unit without worrying about the size and structure of the underlying datafiles.
If a tablespace is designated as a
temporary
tablespace, the tablespace itself is permanent;
only the segments saved in the tablespace are temporary. Oracle uses temporary tablespaces
to support sorting operations such as index creations and join processing. Temporary segments
should not be stored in the same tablespaces as permanent objects.
Tablespaces can be either

dictionary managed
or
locally managed
. In a dictionary-managed
tablespace, space management is recorded in the data dictionary. In a locally managed tablespace
(the default in Oracle Database 10
g)
, Oracle maintains a bitmap in each datafile of the tablespace to
track space availability. Only quotas are managed in the data dictionary, dramatically reducing
the contention for data dictionary tables.
Automated Storage Management
Automatic storage management
(ASM), available as of Oracle Database 10
g,
automates the layout
of datafiles and other operating system–level files used by the database, by distributing them
across all available disks. When new disks are added to the ASM instance, the database files are
automatically redistributed across all disks in the defined disk group for optimal performance.
The multiplexing features of an ASM instance minimize the possibility of data loss and are
generally more effective than a manual scheme that places critical files and backups on different
physical drives. See Chapter 46.
Chapter 1: Oracle Database 10
g
Architecture Options
7

×