Table of Contents
- List of Tables
- Title and Copyright Information
- Preface
-
Changes in This Release for Oracle Database
Development Guide
-
New Features in 23ai
- Blockchain Table Log History
- Data Use Case Domains
- Flashback Time Travel Enhancements
- IF [NOT] EXISTS Syntax Support
- Implicit Connection Pooling for Database Resident Connection Pooling
- Lock-Free Reservation
- Multilingual Engine JavaScript Modules and Environments
- Multiple Named Pools for DRCP
- Precheckable Constraints using JSON Schema
- Reset Database Session State
- Saga APIs Using Oracle Saga Framework
- Schema Annotations
- Sessionless Transactions
- Shut Down Connection Draining for DRCP
- Table DDL Change Notification
- Deprecated Features
-
New Features in 23ai
-
Part I Database Development Fundamentals
- 1 Design Basics
- 2 Connection Strategies for Database Applications
-
3
Performance and Scalability
- 3.1 Performance Strategies
- 3.2 Tools for Performance
- 3.3 Monitoring Database Performance
- 3.4 Testing for Performance
-
3.5
Using Client Result Cache
- 3.5.1 About Client Result Cache
- 3.5.2 Benefits of Client Result Cache
- 3.5.3 Guidelines for Using Client Result Cache
- 3.5.4 Setting Result Cache Integrity
- 3.5.5 Client Result Cache Consistency
- 3.5.6 Deployment-Time Settings for Client Result Cache
- 3.5.7 Client Result Cache Statistics
- 3.5.8 Validation of Client Result Cache
- 3.5.9 Client Result Cache and Server Result Cache
- 3.5.10 Client Result Cache Demo Files
- 3.5.11 Client Result Cache Compatibility with Previous Releases
- 3.6 Statement Caching
- 3.7 OCI Client Statement Cache Auto-Tuning
- 3.8 Client-Side Deployment Parameters
- 3.9 Using Query Change Notification
-
3.10
Using Database Resident Connection Pool
- 3.10.1 About Database Resident Connection Pool
- 3.10.2 Configuring DRCP
- 3.10.3 Using Multi-pool DRCP
- 3.10.4 Sharing Proxy Sessions
- 3.10.5 Using JDBC with DRCP
- 3.10.6 Using OCI Session Pool APIs with DRCP
- 3.10.7 Session Purity
- 3.10.8 Connection Class
- 3.10.9 Session Purity and Connection Class Defaults
- 3.10.10 Setting the Purity and Connection Class in the Connection String
- 3.10.11 Starting DRCP
- 3.10.12 Shut Down Connection Draining for DRCP
- 3.10.13 Enabling DRCP
- 3.10.14 Connecting to a Pool in Multi-pool DRCP
-
3.10.15
Implicit Connection
Pooling
- 3.10.15.1 Implicit Stateful and Stateless Sessions
- 3.10.15.2 Statement and Transaction Boundary
- 3.10.15.3 Configuring Implicit Connection Pool Boundaries
- 3.10.15.4 Impact of Round-trip OCI Calls on Implicit Connection Pooling States
- 3.10.15.5 Deciding which Pool Boundary to Use
- 3.10.15.6 Implicit Connection Pooling with CMAN-TDM and PRCP
- 3.10.15.7 Setting or Resetting the Session State at the Boundaries During Deployment
- 3.10.15.8 Using the Session Cached Cursors with Implicit Connection Pooling
- 3.10.15.9 Security
- 3.10.16 Benefiting from the Scalability of DRCP in an OCI Application
- 3.10.17 Benefiting from the Scalability of DRCP in a Java Application
- 3.10.18 Best Practices for Using DRCP
- 3.10.19 Compatibility and Migration
- 3.10.20 Using DRCP with Oracle Database Native Network Encryption
- 3.10.21 DRCP Restrictions
- 3.10.22 Using DRCP with Custom Pools
- 3.10.23 Explicitly Marking Sessions Stateful or Stateless
- 3.10.24 Using DRCP with Oracle Real Application Clusters
- 3.10.25 DRCP with Data Guard
- 3.11 Memoptimize Pool
- 3.12 Oracle RAC Sharding
- 4 Designing Applications for Oracle Real-World Performance
-
5
Security
- 5.1 Enabling User Access with Grants, Roles, and Least Privilege
- 5.2 Automating Database Logins
- 5.3 Controlling User Access with Fine-Grained Access Control
- 5.4 Using Invoker's and Definer's Rights for Procedures and Functions
- 5.5 Managing External Procedures for Your Applications
- 5.6 Auditing User Activity
-
6
High Availability
- 6.1 Transparent Application Failover (TAF)
- 6.2 Oracle Connection Manager in Traffic Director Mode
- 6.3 About Fast Application Notification (FAN)
- 6.4 About Fast Connection Failover (FCF)
- 6.5 About Application Continuity
- 6.6 About Transaction Guard
- 6.7 About Service and Load Management for Database Clouds
- 7 Advanced PL/SQL Features
-
Part II SQL for Application Developers
-
8
SQL Processing for Application Developers
- 8.1 Description of SQL Statement Processing
- 8.2 Grouping Operations into Transactions
- 8.3 Ensuring Repeatable Reads with Read-Only Transactions
- 8.4 Locking Tables Explicitly
- 8.5 Using Oracle Lock Management Services (User Locks)
- 8.6 Using Serializable Transactions for Concurrency Control
- 8.7 Nonblocking and Blocking DDL Statements
- 8.8 Autonomous Transactions
- 8.9 Resuming Execution After Storage Allocation Errors
- 8.10 Using IF EXISTS and IF NOT EXISTS
-
9
Using SQL Data Types in Database Applications
- 9.1 Using the Correct and Most Specific Data Type
- 9.2 Representing Character Data
-
9.3
Representing Numeric Data
- 9.3.1 Floating-Point Number Components
- 9.3.2 Floating-Point Number Formats
- 9.3.3 Representing Special Values with Native Floating-Point Data Types
- 9.3.4 Comparing Native Floating-Point Values
- 9.3.5 Arithmetic Operations with Native Floating-Point Data Types
- 9.3.6 Conversion Functions for Native Floating-Point Data Types
- 9.3.7 Client Interfaces for Native Floating-Point Data Types
- 9.4 Representing Date and Time Data
- 9.5 Representing Specialized Data
- 9.6 Identifying Rows by Address
- 9.7 Displaying Metadata for SQL Operators and Functions
-
10
Registering Application Data Usage with the
Database
-
10.1
Data Use Case Domains
- 10.1.1 Overview of Use Case Domains
- 10.1.2 Use Case Domain Types and When to Use Them
- 10.1.3 Privileges Required for Use Case Domains
- 10.1.4 Using a Single-column Use Case Domain
-
10.1.5
Using a Multi-column Use Case
Domain
- 10.1.5.1 Creating a Multi-column Use Case Domain
- 10.1.5.2 Associating a Multi-column Use Case Domain at Table Creation
- 10.1.5.3 Associating a Multi-column Use Case Domain with Existing Columns
- 10.1.5.4 Altering a Multi-column Use Case Domain
- 10.1.5.5 Disassociating a Multi-column Use Case Domain from a Column
- 10.1.5.6 Dropping a Multi-column Use Case Domain
- 10.1.6 Using a Flexible Use Case Domain
- 10.1.7 Using an Enumeration Use Case Domain
- 10.1.8 Specifying a Data Type for a Domain
- 10.1.9 Changing the Use Case Domain Properties
- 10.1.10 SQL Functions for Use Case Domains
- 10.1.11 Viewing Domain Information
- 10.1.12 Built-in Use Case Domains
-
10.2
Schema Annotations
- 10.2.1 Overview of Annotations
- 10.2.2 Annotations and Comments
- 10.2.3 Supported Database Objects
- 10.2.4 Privileges Required for Using Annotations
-
10.2.5
DDL Statements for
Annotations
- 10.2.5.1 Annotation Syntax
- 10.2.5.2 DDL Statements to Annotate a Table
- 10.2.5.3 DDL Statements to Annotate a Table Column
- 10.2.5.4 DDL Statements to Annotate Views and Materialized Views
- 10.2.5.5 DDL Statements to Annotate Indexes
- 10.2.5.6 DDL Statements to Annotate Domains
- 10.2.5.7 Dictionary Table and Views
-
10.1
Data Use Case Domains
- 11 Using Regular Expressions in Database Applications
-
12
Using Indexes in Database Applications
- 12.1 Guidelines for Managing Indexes
- 12.2 Managing Indexes
- 12.3 When to Use Domain Indexes
-
12.4
When to Use Function-Based Indexes
- 12.4.1 Advantages of Function-Based Indexes
- 12.4.2 Disadvantages of Function-Based Indexes
- 12.4.3 Example: Function-Based Index for Precomputing Arithmetic Expression
- 12.4.4 Example: Function-Based Indexes on Object Column
- 12.4.5 Example: Function-Based Index for Faster Case-Insensitive Searches
- 12.4.6 Example: Function-Based Index for Language-Dependent Sorting
-
13
Maintaining Data Integrity in Database Applications
- 13.1 Enforcing Business Rules with Constraints
- 13.2 Enforcing Business Rules with Both Constraints and Application Code
- 13.3 Creating Indexes for Use with Constraints
- 13.4 When to Use NOT NULL Constraints
- 13.5 When to Use Default Column Values
- 13.6 Choosing a Primary Key for a Table (PRIMARY KEY Constraint)
- 13.7 When to Use UNIQUE Constraints
- 13.8 Enforcing Referential Integrity with FOREIGN KEY Constraints
- 13.9 Minimizing Space and Time Overhead for Indexes Associated with Constraints
- 13.10 Guidelines for Indexing Foreign Keys
- 13.11 Referential Integrity in a Distributed Database
- 13.12 When to Use CHECK Constraints
- 13.13 Using PRECHECK to Pre-validate a CHECK Constraint
- 13.14 Examples of Defining Constraints
- 13.15 Enabling and Disabling Constraints
- 13.16 Modifying Constraints
- 13.17 Renaming Constraints
- 13.18 Dropping Constraints
- 13.19 Managing FOREIGN KEY Constraints
- 13.20 Viewing Information About Constraints
-
8
SQL Processing for Application Developers
-
Part III PL/SQL for Application Developers
-
14
Coding PL/SQL Subprograms and Packages
- 14.1 Overview of PL/SQL Subprograms
- 14.2 Overview of PL/SQL Packages
- 14.3 Overview of PL/SQL Units
-
14.4
Creating PL/SQL Subprograms and Packages
- 14.4.1 Privileges Needed to Create Subprograms and Packages
- 14.4.2 Creating Subprograms and Packages
- 14.4.3 PL/SQL Object Size Limits
- 14.4.4 PL/SQL Data Types
- 14.4.5 Returning Result Sets to Clients
- 14.4.6 Returning Large Amounts of Data from a Function
- 14.4.7 PL/SQL Function Result Cache
- 14.4.8 Overview of Bulk Binding
- 14.4.9 PL/SQL Dynamic SQL
- 14.5 Altering PL/SQL Subprograms and Packages
- 14.6 Deprecating Packages, Subprograms, and Types
- 14.7 Dropping PL/SQL Subprograms and Packages
- 14.8 Compiling PL/SQL Units for Native Execution
- 14.9 Invoking Stored PL/SQL Subprograms
-
14.10
Invoking Stored PL/SQL Functions from SQL Statements
- 14.10.1 Why Invoke PL/SQL Functions from SQL Statements?
- 14.10.2 Where PL/SQL Functions Can Appear in SQL Statements
- 14.10.3 When PL/SQL Functions Can Appear in SQL Expressions
- 14.10.4 Controlling Side Effects of PL/SQL Functions Invoked from SQL Statements
- 14.11 Analyzing and Debugging Stored Subprograms
- 14.12 Package Invalidations and Session State
- 14.13 Example: Raising an ORA-04068 Error
- 14.14 Example: Trapping ORA-04068
-
15
Using PL/Scope
- 15.1 Overview of PL/Scope
- 15.2 Privileges Required for Using PL/Scope
- 15.3 Specifying Identifier and Statement Collection
- 15.4 How Much Space is PL/Scope Data Using?
- 15.5 Viewing PL/Scope Data
- 15.6 Overview of Data Dictionary Views Useful to Manage PL/SQL Code
- 15.7 Sample PL/Scope Session
-
16
Using the PL/SQL Hierarchical Profiler
- 16.1 Overview of PL/SQL Hierarchical Profiler
- 16.2 Collecting Profile Data
- 16.3 Understanding Raw Profiler Output
- 16.4 Analyzing Profile Data
- 16.5 plshprof Utility
- 17 Using PL/SQL Basic Block Coverage to Maintain Quality
-
18
Developing PL/SQL Web Applications
- 18.1 Overview of PL/SQL Web Applications
- 18.2 Implementing PL/SQL Web Applications
- 18.3 Using mod_plsql Gateway to Map Client Requests to a PL/SQL Web Application
-
18.4
Using Embedded PL/SQL Gateway
- 18.4.1 How Embedded PL/SQL Gateway Processes Client Requests
- 18.4.2 Installing Embedded PL/SQL Gateway
-
18.4.3
Configuring Embedded PL/SQL Gateway
- 18.4.3.1 Configuring Embedded PL/SQL Gateway: Overview
-
18.4.3.2
Configuring User Authentication for Embedded PL/SQL Gateway
- 18.4.3.2.1 Configuring Static Authentication with DBMS_EPG
- 18.4.3.2.2 Configuring Dynamic Authentication with DBMS_EPG
- 18.4.3.2.3 Configuring Anonymous Authentication with DBMS_EPG
- 18.4.3.2.4 Determining the Authentication Mode of a DAD
- 18.4.3.2.5 Examples: Creating and Configuring DADs
- 18.4.3.2.6 Example: Determining the Authentication Mode for a DAD
- 18.4.3.2.7 Example: Determining the Authentication Mode for All DADs
- 18.4.3.2.8 Example: Showing DAD Authorizations that Are Not in Effect
- 18.4.3.2.9 Examining Embedded PL/SQL Gateway Configuration
- 18.4.4 Invoking PL/SQL Stored Subprograms Through Embedded PL/SQL Gateway
- 18.4.5 Securing Application Access with Embedded PL/SQL Gateway
- 18.4.6 Restrictions in Embedded PL/SQL Gateway
- 18.4.7 Using Embedded PL/SQL Gateway: Scenario
- 18.5 Generating HTML Output with PL/SQL
-
18.6
Passing Parameters to PL/SQL Web Applications
- 18.6.1 Passing List and Dropdown-List Parameters from an HTML Form
- 18.6.2 Passing Option and Check Box Parameters from an HTML Form
- 18.6.3 Passing Entry-Field Parameters from an HTML Form
- 18.6.4 Passing Hidden Parameters from an HTML Form
- 18.6.5 Uploading a File from an HTML Form
- 18.6.6 Submitting a Completed HTML Form
- 18.6.7 Handling Missing Input from an HTML Form
- 18.6.8 Maintaining State Information Between Web Pages
- 18.7 Performing Network Operations in PL/SQL Subprograms
-
19
Using Continuous Query Notification (CQN)
- 19.1 About Object Change Notification (OCN)
- 19.2 About Query Result Change Notification (QRCN)
- 19.3 Events that Generate Notifications
- 19.4 Notification Contents
- 19.5 Good Candidates for CQN
- 19.6 Creating CQN Registrations
-
19.7
Using PL/SQL to Create CQN Registrations
- 19.7.1 PL/SQL CQN Registration Interface
-
19.7.2
CQN Registration Options
- 19.7.2.1 Notification Type Option
- 19.7.2.2 QRCN Mode (QRCN Notification Type Only)
- 19.7.2.3 ROWID Option
- 19.7.2.4 Operations Filter Option (OCN Notification Type Only)
- 19.7.2.5 Transaction Lag Option (OCN Notification Type Only)
- 19.7.2.6 Notification Grouping Options
- 19.7.2.7 Reliable Option
- 19.7.2.8 Purge-on-Notify and Timeout Options
- 19.7.3 Prerequisites for Creating CQN Registrations
- 19.7.4 Queries that Can Be Registered for Object Change Notification (OCN)
- 19.7.5 Queries that Can Be Registered for Query Result Change Notification (QRCN)
- 19.7.6 Using PL/SQL to Register Queries for CQN
- 19.7.7 Best Practices for CQN Registrations
- 19.7.8 Troubleshooting CQN Registrations
- 19.7.9 Deleting Registrations
- 19.7.10 Configuring CQN: Scenario
-
19.8
Using OCI to Create CQN Registrations
- 19.8.1 Using OCI for Query Result Set Notifications
- 19.8.2 Using OCI to Register a Continuous Query Notification
- 19.8.3 Using OCI for Client Initiated CQN Registrations
- 19.8.4 Using OCI Subscription Handle Attributes for Continuous Query Notification
- 19.8.5 OCI_ATTR_CQ_QUERYID Attribute
- 19.8.6 Using OCI Continuous Query Notification Descriptors
- 19.8.7 Demonstrating Continuous Query Notification in an OCI Sample Program
- 19.9 Querying CQN Registrations
- 19.10 Interpreting Notifications
-
14
Coding PL/SQL Subprograms and Packages
-
Part IV Advanced Topics for Application Developers
-
20
Choosing a Programming Environment
- 20.1 Overview of Application Architecture
- 20.2 Overview of the Program Interface
- 20.3 Overview of PL/SQL
- 20.4 Overview of Oracle Database Java Support
-
20.5
Overview of JavaScript
- 20.5.1 Multilingual Engine Overview
- 20.5.2 MLE Concepts
- 20.5.3 Understanding MLE Execution Context and Runtime Isolation
- 20.5.4 MLE Environment Overview
- 20.5.5 JavaScript MLE Modules Overview
- 20.5.6 JavaScript MLE Call Specification Overview
- 20.5.7 Invoking JavaScript in the Database
- 20.5.8 Invoking JavaScript Using MLE Modules
- 20.5.9 Invoking JavaScript Using Dynamic MLE Execution
- 20.5.10 Privileges for Working with JavaScript in MLE
- 20.5.11 Other Supported MLE Features
- 20.6 Choosing PL/SQL, Java, or JavaScript
- 20.7 Overview of Precompilers
- 20.8 Overview of OCI and OCCI
- 20.9 Comparison of Precompilers and OCI
- 20.10 Overview of Oracle Data Provider for .NET (ODP.NET)
- 20.11 Overview of OraOLEDB
-
21
Developing Applications with Multiple Programming Languages
- 21.1 Overview of Multilanguage Programs
- 21.2 What Is an External Procedure?
- 21.3 Overview of Call Specification for External Procedures
- 21.4 Loading External Procedures
- 21.5 Publishing External Procedures
- 21.6 Publishing Java Class Methods
- 21.7 Publishing External C Procedures
-
21.8
Locations of Call Specifications
- 21.8.1 Example: Locating a Call Specification in a PL/SQL Package
- 21.8.2 Example: Locating a Call Specification in a PL/SQL Package Body
- 21.8.3 Example: Locating a Call Specification in an ADT Specification
- 21.8.4 Example: Locating a Call Specification in an ADT Body
- 21.8.5 Example: Java with AUTHID
- 21.8.6 Example: C with Optional AUTHID
- 21.8.7 Example: Mixing Call Specifications in a Package
- 21.9 Passing Parameters to External C Procedures with Call Specifications
- 21.10 Running External Procedures with CALL Statements
- 21.11 Handling Errors and Exceptions in Multilanguage Programs
- 21.12 Using Service Routines with External C Procedures
-
21.13
Doing Callbacks with External C Procedures
- 21.13.1 OCIExtProcGetEnv
- 21.13.2 Object Support for OCI Callbacks
- 21.13.3 Restrictions on Callbacks
- 21.13.4 Debugging External C Procedures
- 21.13.5 Example: Calling an External C Procedure
- 21.13.6 Global Variables in External C Procedures
- 21.13.7 Static Variables in External C Procedures
- 21.13.8 Restrictions on External C Procedures
-
22
Using Oracle Flashback Technology
- 22.1 Overview of Oracle Flashback Technology
- 22.2 Configuring Your Database for Oracle Flashback Technology
- 22.3 Using Oracle Flashback Query (SELECT AS OF)
- 22.4 Using Oracle Flashback Version Query
- 22.5 Using Oracle Flashback Transaction Query
- 22.6 Using Oracle Flashback Transaction Query with Oracle Flashback Version Query
- 22.7 Using DBMS_FLASHBACK Package
- 22.8 Using Flashback Transaction
-
22.9
Using Flashback Time Travel
- 22.9.1 DDL Statements on Tables Enabled for Flashback Archive
- 22.9.2 Creating a Flashback Archive
- 22.9.3 Altering a Flashback Archive
- 22.9.4 Dropping a Flashback Archive
- 22.9.5 Specifying the Default Flashback Archive
- 22.9.6 Enabling and Disabling Flashback Archive
- 22.9.7 Viewing Flashback Archive Data
- 22.9.8 Transporting Flashback Archive Data between Databases
-
22.9.9
Flashback Time Travel Scenarios
- 22.9.9.1 Scenario: Using Flashback Time Travel to Enforce Digital Shredding
- 22.9.9.2 Scenario: Using Flashback Time Travel to Access Historical Data
- 22.9.9.3 Scenario: Using Flashback Time Travel to Generate Reports
- 22.9.9.4 Scenario: Using Flashback Time Travel for Auditing
- 22.9.9.5 Scenario: Using Flashback Time Travel to Recover Data
- 22.9.10 Protecting Flashback Archive Data
- 22.10 General Guidelines for Oracle Flashback Technology
- 22.11 Oracle Virtual Private Database Policies and Oracle Flashback Time Travel
- 22.12 Performance Guidelines for Oracle Flashback Technology
- 22.13 Multitenant Container Database Restrictions for Oracle Flashback Technology
- 23 Developing Applications with the Publish-Subscribe Model
- 24 Using the Oracle Database ODBC Driver
-
25
Using the Identity Code Package
- 25.1 Identity Concepts
- 25.2 What Is the Identity Code Package?
-
25.3
Using the Identity Code Package
-
25.3.1
Storing RFID Tags in Oracle Database Using MGD_ID ADT
- 25.3.1.1 Creating a Table with MGD_ID Column Type and Storing EPC Tag Encodings in the Column
-
25.3.1.2
Constructing MGD_ID Objects to Represent RFID Tags
- 25.3.1.2.1 Constructing an MGD_ID Object (SGTIN-64) Passing in the Category ID and a List of Components
- 25.3.1.2.2 Constructing an MGD_ID object (SGTIN-64) and Passing in the Category ID, the Tag Identifier, and the List of Additional Required Parameters
- 25.3.1.2.3 Constructing an MGD_ID object (SGTIN-64) and Passing in the Category Name, Category Version (if null, then the latest version is used), and a List of Components
- 25.3.1.2.4 Constructing an MGD_ID object (SGTIN-64) and Passing in the Category Name and Category Version, the Tag Identifier, and the List of Additional Required Parameters
- 25.3.1.3 Inserting an MGD_ID Object into a Database Table
- 25.3.1.4 Querying MGD_ID Column Type
- 25.3.2 Building a Function-Based Index Using the Member Functions of the MGD_ID Column Type
- 25.3.3 Using MGD_ID ADT Functions
- 25.3.4 Defining a Category of Identity Codes and Adding Encoding Schemes to an Existing Category
-
25.3.1
Storing RFID Tags in Oracle Database Using MGD_ID ADT
- 25.4 Identity Code Package Types
- 25.5 DBMS_MGD_ID_UTL Package
- 25.6 Identity Code Metadata Tables and Views
-
25.7
Electronic Product Code (EPC) Concepts
- 25.7.1 RFID Technology and EPC v1.1 Coding Schemes
-
25.7.2
Product Code Concepts and Their Current Use
- 25.7.2.1 Electronic Product Code (EPC)
- 25.7.2.2 Global Trade Identification Number (GTIN) and Serializable Global Trade Identification Number (SGTIN)
- 25.7.2.3 Serial Shipping Container Code (SSCC)
- 25.7.2.4 Global Location Number (GLN) and Serializable Global Location Number (SGLN)
- 25.7.2.5 Global Returnable Asset Identifier (GRAI)
- 25.7.2.6 Global Individual Asset Identifier (GIAI)
- 25.7.2.7 RFID EPC Network
- 25.8 Oracle Database Tag Data Translation Schema
- 26 Microservices Architecture
- 27 Oracle Backend for Microservices and AI
-
28
Developing Applications with Sagas
- 28.1 Implementing Sagas with Oracle Database
- 28.2 Oracle Saga Framework Overview
- 28.3 Saga Framework Features
- 28.4 Saga Framework Concepts
- 28.5 Initializing the Saga Framework
- 28.6 Setting Up a Saga Topology
- 28.7 Managing a Saga Using the PL/SQL Interface
- 28.8 Developing Java Applications Using Saga Annotations
- 28.9 Finalizing a Saga Explicitly
- 28.10 AfterSaga Callbacks
-
29
Using Lock-Free Reservation
- 29.1 About Concurrency in Transaction Processing
- 29.2 Lock-Free Reservation Terminology
-
29.3
Lock-Free Reservation
- 29.3.1 Comparing Optimistic Locking and Lock-Free Reservation
- 29.3.2 Creating a Reservable Column at Table Creation
- 29.3.3 Adding or Modifying Reservable Columns
- 29.3.4 About CHECK Constraints in Reservable Columns
- 29.3.5 Example: Conventional Locking and Lock-Free Reservation
- 29.3.6 Querying Reservable Column Views
- 29.4 Benefits of Using Lock-Free Reservation
- 29.5 Guidelines and Restrictions for Lock-Free Reservation
-
30
Developing Applications with Oracle XA
- 30.1 X/Open Distributed Transaction Processing (DTP)
- 30.2 Oracle XA Library Subprograms
-
30.3
Developing and Installing XA Applications
- 30.3.1 DBA or System Administrator Responsibilities
- 30.3.2 Application Developer Responsibilities
- 30.3.3 Defining the xa_open String
- 30.3.4 Using Oracle XA with Precompilers
- 30.3.5 Using Oracle XA with OCI
- 30.3.6 Managing Transaction Control with Oracle XA
- 30.3.7 Examples of Precompiler Applications
- 30.3.8 Migrating Precompiler or OCI Applications to TPM Applications
- 30.3.9 Managing Oracle XA Library Thread Safety
- 30.3.10 Using the DBMS_XA Package
- 30.4 Troubleshooting XA Applications
-
30.5
Oracle XA Issues and Restrictions
- 30.5.1 Using Database Links in Oracle XA Applications
- 30.5.2 Managing Transaction Branches in Oracle XA Applications
-
30.5.3
Using Oracle XA with Oracle Real Application Clusters (Oracle RAC)
- 30.5.3.1 Oracle RAC XA Limitations
- 30.5.3.2 GLOBAL_TXN_PROCESSES Initialization Parameter
- 30.5.3.3 Managing Transaction Branches on Oracle RAC
- 30.5.3.4 Managing Instance Recovery in Oracle RAC with DTP Services (10.2)
- 30.5.3.5 Global Uniqueness of XIDs in Oracle RAC
- 30.5.3.6 Tight and Loose Coupling
- 30.5.4 SQL-Based Oracle XA Restrictions
- 30.5.5 Miscellaneous Restrictions
-
31
Developing Applications with Sessionless
Transactions
- 31.1 Introduction to Managing Transactions and Sessionless Transactions
- 31.2 Sessionless Transactions Overview
- 31.3 Sessionless Transactions Capabilities
- 31.4 Benefits of Sessionless Transactions
-
31.5
Using Sessionless
Transactions
- 31.5.1 Understanding Active Sessionless Transactions
- 31.5.2 Understanding the Lifecycle of Sessionless Transactions
- 31.5.3 Understanding Server Round Trips and Pre-call and Post-call Functions
- 31.5.4 Prerequisites for Using Sessionless Transactions
- 31.5.5 Setting a Global Transaction ID
- 31.5.6 Starting a New Sessionless Transaction
- 31.5.7 Retrieving a Global Transaction ID
- 31.5.8 Suspending a Sessionless Transaction
- 31.5.9 Resuming a Suspended Sessionless Transaction
- 31.5.10 Finalizing a Sessionless Transaction
- 31.5.11 Example: Sessionless Transactions with OCI API
- 31.5.12 Rules and Guidelines for Using Sessionless Transactions
- 31.5.13 Error Messages and Notifications
- 31.6 Sessionless Transactions and Oracle Coordinated Distributed Transaction Interoperability
- 31.7 Restrictions for Sessionless Transactions
-
32
Understanding Schema Object Dependency
- 32.1 Overview of Schema Object Dependency
- 32.2 Querying Object Dependencies
- 32.3 Object Status
- 32.4 Invalidation of Dependent Objects
- 32.5 Guidelines for Reducing Invalidation
- 32.6 Object Revalidation
- 32.7 Name Resolution in Schema Scope
- 32.8 Local Dependency Management
- 32.9 Remote Dependency Management
- 32.10 Remote Procedure Call (RPC) Dependency Management
- 32.11 Shared SQL Dependency Management
-
33
Using Edition-Based Redefinition
- 33.1 Overview of Edition-Based Redefinition
-
33.2
Editions
-
33.2.1
Editioned and Noneditioned Objects
- 33.2.1.1 Name Resolution for Editioned and Noneditioned Objects
- 33.2.1.2 Noneditioned Objects That Can Depend on Editioned Objects
- 33.2.1.3 Editionable and Noneditionable Schema Object Types
- 33.2.1.4 Enabling Editions for a User
- 33.2.1.5 EDITIONABLE and NONEDITIONABLE Properties
- 33.2.1.6 Rules for Editioned Objects
- 33.2.2 Creating an Edition
- 33.2.3 Editioned Objects and Copy-on-Change
- 33.2.4 Making an Edition Available to Some Users
- 33.2.5 Making an Edition Available to All Users
- 33.2.6 Current Edition and Session Edition
- 33.2.7 Retiring an Edition
- 33.2.8 Dropping an Edition
-
33.2.1
Editioned and Noneditioned Objects
- 33.3 Editions and Audit Policies
- 33.4 Editioning Views
-
33.5
Crossedition Triggers
- 33.5.1 Forward Crossedition Triggers
- 33.5.2 Reverse Crossedition Triggers
- 33.5.3 Crossedition Trigger Interaction with Editions
- 33.5.4 Creating a Crossedition Trigger
- 33.5.5 Transforming Data from Pre- to Post-Upgrade Representation
- 33.5.6 Dropping the Crossedition Triggers
- 33.6 Displaying Information About EBR Features
-
33.7
Using EBR to Upgrade an Application
- 33.7.1 Preparing Your Application to Use Editioning Views
- 33.7.2 Procedure for EBR Using Only Editions
- 33.7.3 Procedure for EBR Using Editioning Views
- 33.7.4 Procedure for EBR Using Crossedition Triggers
- 33.7.5 Rolling Back the Application Upgrade
- 33.7.6 Reclaiming Space Occupied by Unused Table Columns
-
33.7.7
Example: Using EBR to Upgrade an Application
- 33.7.7.1 Existing Application
- 33.7.7.2 Preparing the Application to Use Editioning Views
-
33.7.7.3
Using EBR to Upgrade the Example Application
- 33.7.7.3.1 Example: Creating an Edition in Which to Upgrade the Example Application
- 33.7.7.3.2 Example: Changing the Table and Replacing the Editioning View
- 33.7.7.3.3 Example: Creating and Enabling the Crossedition Triggers
- 33.7.7.3.4 Example: Applying the Transforms
- 33.7.7.3.5 Example: Viewing Data in the Changed Table
-
34
Using Transaction Guard
- 34.1 Problem That Transaction Guard Solves
- 34.2 Solution That Transaction Guard Provides
- 34.3 Transaction Guard Concepts and Scope
- 34.4 Database Configuration for Transaction Guard
-
34.5
Developing Applications That Use Transaction Guard
- 34.5.1 Typical Transaction Guard Usage
- 34.5.2 Details for Using the LTXID
- 34.5.3 Transaction Guard and Transparent Application Failover
- 34.5.4 Using Transaction Guard with ODP.NET
- 34.5.5 Connection-Pool LTXID Usage
- 34.5.6 Improved Commit Outcome for XA One Phase Optimizations
- 34.5.7 Additional Requirements for Transaction Guard Development
- 34.6 Transaction Guard and Its Relationship to Application Continuity
- 34.7 Transaction Guard Support during DBMS_ROLLING Operations
-
35
Table DDL Change Notification
- 35.1 Overview of Table DDL Change Notification
- 35.2 Table DDL Change Notification Terminology
- 35.3 Benefits of Table DDL Change Notification
- 35.4 Features of Table DDL Change Notification
- 35.5 Using Table DDL Change Notification
- 35.6 Registering for Table DDL Change Notification
- 35.7 Unregistering for Table DDL Change Notifications
- 35.8 Supported DDL Events and Commands
- 35.9 Monitoring Table DDL Change Notification
-
20
Choosing a Programming Environment
- A.1 Appendix: Troubleshooting the Saga Framework
- B.1 Appendix: Troubleshooting UTL_HTTP
- C.1 Appendix: Recording DML Changes on the Tracked Table
- Index