56

Presentation - Oracle Net Services

Embed Size (px)

DESCRIPTION

Oracle Net Services

Citation preview

Page 1: Presentation - Oracle Net Services

1

Page 2: Presentation - Oracle Net Services

<Insert Picture Here>

Oracle Net Services:Performance, Scalability, HA and Security Best PracticesKant C Patel Viswanath RavishankharKuassi MensahKant C PatelDirector of DevelopmentOracle Net

Viswanath RavishankharTechnical Product ManagerIntel Corporation

Kuassi MensahGroup Product ManagerOracle Net and JDBC

Page 3: Presentation - Oracle Net Services

Program

<Insert Picture Here>• Overview of Oracle Net• Why Optimize Oracle Net?• 11g New Features• Best Practices

– Operating System and Network– Database ClientDatabase Client– Net Listener– Database Server

C S• Intel Case Study• Q/A

3

Page 4: Presentation - Oracle Net Services

Oracle Net Overview

• Primary Communication Foundation for DB

• Formerly known as SQL*Net• Oracle’s Family of Networking

Features:– Oracle Net– Oracle Net Listener– Connection Manager– Configuration Tools

• Net Manager• NetCA

4

Page 5: Presentation - Oracle Net Services

Why Optimize Oracle Net?

• System Performance– Increase Network bandwidth utilization– Lower database CPU utilization

• High Availability– Better respond to database/host/network failures

• Network Scalability– Scale better with more client connections– Load-balance to improve application experience

• Network Manageability– Simplify deployment and configurationSimplify deployment and configuration

• Network Security– Protect and recover from Denial of Service attacks

5

Page 6: Presentation - Oracle Net Services

Net Configuration Files

• sqlnet.oraO f f– Main Oracle Net configuration file

– On both Client and Server• listener.ora

C fi ti f th N t Li t– Configuration for the Net Listener– On Server only

• tnsnames.oraContains Connect Name to Descriptor mappings– Contains Connect Name to Descriptor mappings

– Used by the TNSNames Naming adapter– On both Client and Server

• ldap oraldap.ora– Contains LDAP configuration information– Used the LDAP Naming adapter– On both Client and Server

6

Page 7: Presentation - Oracle Net Services

Oracle Net 11g New Features

• Performance & Scalability– Support for large SDU (11.2.0.2)pp g ( )– Optimized networking stacks for various data transfer needs

• Network Fast Path for SQL operations• Zero Copy I/O Path for bulk data transfers

– Support for Database Resident Connection Pools– Support for Scalable Operating System Event Models

Hi h A il bilit & M bilit• High Availability & Manageability– IP address list traversal for each hostname during connect (11.2.0.1)– Efficient dead-node detection for failover (11.2.0.1)

Option to enable connection retries (11 2 0 1)– Option to enable connection retries (11.2.0.1)– Easy Connect Naming enhancements– Integration with Automatic Diagnostic Repository– Option for Default Service in Listener

7

Option for Default Service in Listener

Page 8: Presentation - Oracle Net Services

Oracle Net 11g New Features

• Network Security– CIDR and wildcard support for valid node checking (11.2.0.1)– Authenticated LDAP name lookup - OID and Active Directory– Protocol level access control for Listener administration

• IPv6 (11.2.0.1)– Support for all features and components in single-instance mode– Support for single listener address across all IP(v4/v6) interfaces

IPv4-only Server Dual-stack Server IPv6-only Server

IPv4-only Client Supported (v4) Supported (v4) Not Supportedy pp ( ) pp ( ) pp

Dual-stack Client Supported (v4) Supported (v4,v6) Supported (v6)

IPv6-only Client Not Supported Supported (v6) Supported (v6)

8

IPv6 only Client Not Supported Supported (v6) Supported (v6)

Page 9: Presentation - Oracle Net Services

O ti S tOperating SystemTuning

9

Page 10: Presentation - Oracle Net Services

Why is OS tuning critical?

• Key role in data transmission!• Some default OS configurations cannot handleSome default OS configurations cannot handle

modern Ethernet speeds• Bandwidth x Delay Product (BDP)

Amount of data on the “wire” at any given point in time– Amount of data on the wire at any given point in time– Default OS buffers not large enough to handle this data– For example, with 40 Mbits/sec bandwidth, 25 msec delay,

BDP (40 1000 8 Kb t / ) (0 025 ) 128 Kb tBDP = (40 × 1000 ÷ 8 Kbytes/sec) × (0.025 sec) ~ 128 Kbytes• TCP a benevolent algorithm – one size fits all

– Slow-start– Exponential back-off– Small Window Sizes– TCP performance features may not be enabled by default

10

Page 11: Presentation - Oracle Net Services

TCP Optimization - Linux

• Use TCP auto-tuning in kernel (2.4.27, 2.6.7)– /proc/sys/net/ipv4/tcp_moderate_rcvbuf (1=on)

• Tune TCP Max Memory– /proc/sys/net/ipv4/tcp rmem and tcp wmemp y p p_ p_– 4096 87380 174760 Tune this to 2xBDP

• Tune the socket buffer sizes– /proc/sys/net/core/rmem max and wmem max/p / y / / / _ _– Set this to 2xBDP

• Ensure that TCP Performance features are enabled– /proc/sys/net/ipv4/tcp sack/proc/sys/net/ipv4/tcp_sack– /proc/sys/net/ipv4/tcp_window_scaling– /proc/sys/net/ipv4/tcp_timestamps

11

Page 12: Presentation - Oracle Net Services

TCP Optimization - Windows

• Vista / Server 2008 supports TCP auto-tuningg• For other versions, tuning necessary under RegKeyHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\

Services\Tcpip\ParametersServices\Tcpip\Parameters

– Turn on Window Scaling and TimestampsTcp1323Opts = 3

S t TCP Wi d Si t 2 BDP– Set TCP Window Size to 2xBDPGlobalMaxTcpWindowSize = <2xBDP>

– If desired, tune Window Size at the Interface LevelTcpip\Parameters\Interfaces\<interfaceGUID>\

TcpWindowSize

12

Page 13: Presentation - Oracle Net Services

Don’t forget the Hardware

• Use Jumbo Frames for GigE networksg• Use NICs with TCP off-loading capabilities• Monitor switches and OS for packet loss

– Causes numerous issues

13

Page 14: Presentation - Oracle Net Services

D t b Cli tDatabase ClientPerformance

14

Page 15: Presentation - Oracle Net Services

Tuning the Socket Buffers

• Set send and receive socket buffer sizes in tnsnames.ora or sqlnet.ora using:– SEND_BUF_SIZE – OS send buffer size– RECV_BUF_SIZE – OS receive buffer size

• Set this size to accommodate the BDP (2x)• Also set on the server

Large buffer sizes help• Large buffer sizes help– Application queue more data to the OS– Have more data on the wire– Better utilize available bandwidth– In WAN deployments

15

Page 16: Presentation - Oracle Net Services

Tuning the Session Data Unit

• Controls SQL*Net packet size– 11g default 8k, Pre-11g default 2k– Max is 64k

• Set in – sqlnet.ora: DEFAULT_SDU_SIZE – tnsnames.ora: SDU in address

• Larger SDU gives• Larger SDU gives– Better Network throughput– Fewer system calls to send and receive data

Less CPU usage system and user– Less CPU usage – system and user• Side-effect of larger SDU: Network buffers take up

more memory

16

Page 17: Presentation - Oracle Net Services

SDU Recommendations

• Optimal SDU varies with application• Increase SDU on both client and server

– SDU for a connection negotiated down to the lower of the two peersp

• Increase SDU to 8k– Good default value for most users

• For bulk data transfer scenarios increase to 64k• For bulk data transfer scenarios, increase to 64k– LOB transfers– XML DB

• Do not set to MTU value– SDU and MTU are independent

17

Page 18: Presentation - Oracle Net Services

D t b Cli tDatabase ClientManageability

18

Page 19: Presentation - Oracle Net Services

Introduction to Net Naming

• Descriptors can be mapped from a Connect Namesales = Connect Name(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))

(CONNECT_DATA=(SERVICE_NAME=sales))) Connect Descriptor

• Naming Adapters map Name to Descriptor:g p p p– Local file: tnsnames.ora– Hostname based: Easy Connect

Directory: Oracle Internet Directory Active Directory– Directory: Oracle Internet Directory, Active Directory

19

Page 20: Presentation - Oracle Net Services

Easy Connect

• Simple, easy to use connect syntax for TCP/IP

[//]host[:port][/service_name][:server][/instance_name]

Example: sqlplus scott/tiger@sales-server/sales

• Useful when no connect descriptor customization is necessary• No need for any client side configuration files

sales-server/salessales-server/sales

is equivalent to

(DESCRIPTION(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales)))

20

Page 21: Presentation - Oracle Net Services

Oracle Net 11g and Easy Connect

• Support for IPv6 hostnames and addresses• Use URL syntax to specify IPv6 addresses

[2001:fe8::12]:1522/sales.us.example.com:dedicated/inst1[2001:fe8::12]:1522/sales.us.example.com:dedicated/inst1

is equivalent to

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=2001:fe8::12)(PORT=1522))(CONNECT DATA=(SERVICE NAME=sales.us.example.com)(CONNECT_DATA (SERVICE_NAME sales.us.example.com)

(INSTANCE_NAME=inst1)(SERVER=dedicated)))

21

Page 22: Presentation - Oracle Net Services

Naming Recommendations

• Use Easy Connect whenever possibley

• If Descriptors do not change often, use tnsnames.ora– Best for small deployments– TNS_ADMIN can be on a shared file system

• If Descriptors change often or for large deployments, use a directory

O l I t t Di t– Oracle Internet Directory– Active Directory on Windows– Enable authenticated binds if needed

22

Page 23: Presentation - Oracle Net Services

D t b Cli tDatabase ClientHigh-Availability

23

Page 24: Presentation - Oracle Net Services

Connection Establishment Timeouts

• Detect dead hosts faster

• Timeout for TCP connection establishment– TCP.CONNECT_TIMEOUT – 11g feature– Enabled by default (60 seconds) in 11gR2

• Timeout for connection to a DB server process– SQLNET.OUTBOUND_CONNECT_TIMEOUT – 10gR2 feature– Set if session establishment takes a long time

• Configurable at connect string level

• Can be used individually or at the same timey– Outbound Connect Timeout must be greater than TCP Timeout

• Option to enable connection retries

24

Page 25: Presentation - Oracle Net Services

Address and Description Lists

• Use client side load-balancing when using RAC(DESCRIPTION=(ADDRESS_LIST=

(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=tcp)(HOST=sales-1)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=sales-2)(PORT=1521))))

– Address to use picked at random

• Use Failover when using Dataguard(DESCRIPTION_LIST =

(LOAD_BALANCE=off)(FAILOVER=on)(DESCRIPTION = …)(DESCRIPTION = …))( ))

• Usage not limited to RAC and Dataguard

25

Page 26: Presentation - Oracle Net Services

RAC + Data Guard Example

Primary Standby

sales-1

RAC

sales-2

y

backup-1

RAC

backup-2

sales-scan=(sales-1,sales-2) backup-scan=(backup-1,backup-2)

26

Page 27: Presentation - Oracle Net Services

The Optimal Connect Descriptor would be

(DESCRIPTION_LIST =(LOAD BALANCE ff)(FAILOVER )(LOAD_BALANCE=off)(FAILOVER=on)(DESCRIPTION =

(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=tcp)(HOST=sales-scan)(PORT=1521))(ADDRESS (PROTOCOL tcp)(HOST sales scan)(PORT 1521))(CONNECT_DATA=(SERVICE_NAME=sales.example.com)))

(DESCRIPTION =(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=tcp)(HOST=backup-scan)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales.example.com))))

27

Page 28: Presentation - Oracle Net Services

The Connect Descriptor internally expands to

(DESCRIPTION_LIST =(LOAD BALANCE ff)(FAILOVER )(LOAD_BALANCE=off)(FAILOVER=on)(DESCRIPTION =

(ADDRESS_LIST=(LOAD BALANCE=on)(LOAD_BALANCE on)(ADDRESS=(PROTOCOL=tcp)(HOST=sales-1)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=sales-2)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME=sales.example.com)))(DESCRIPTION =

(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS (PROTOCOL t )(HOST b k 1)(PORT 1521))(ADDRESS=(PROTOCOL=tcp)(HOST=backup-1)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=backup-2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=sales.example.com))))

28

Page 29: Presentation - Oracle Net Services

Fail-over for Connected Sessions

• Established client connections could hang wheng– Database host crashes– Remote Networks fail

• Detection of such failures could take a while• Detection of such failures could take a while– TCP behavior - timeouts in minutes– Depends on what the client does

• To catch such failures– Set a Receive Timeout

• If your application is active and does not use long running• If your application is active and does not use long-running queries

– Use Fast Application Notification (FAN)

29

Page 30: Presentation - Oracle Net Services

Thin-JDBC Tuning

• SDU passed through the connect stringg g“jdbc:oracle:thin:@(DESCRIPTION….(SDU=…)…)

• Connect Timeout set through propertyoracle net CONNECT TIMEOUToracle.net.CONNECT_TIMEOUT

• Read Timeout set throughoracle.net.READ_TIMEOUT

– Note: Do not use as a query-timeout.

• For Query Timeout, use Statement.cancel or State e t.ca ce oStatement.setQueryTimeout

30

Page 31: Presentation - Oracle Net Services

N t Li tNet ListenerScalability. HA. Security.

31

Page 32: Presentation - Oracle Net Services

What is the Net Listener?

• First process that clients talk to• Brokers client requests, handing them off to service

handlers– DispatchersDispatchers– Dedicated servers– Connection Broker – DRCP (11g)

R i l d d t f th d t b• Receives load updates from the database• Does server side load-balancing across instances in RAC• Does server side failover across nodes in RACDoes server side failover across nodes in RAC• Can listen on multiple end-points or protocol addresses• Also supports other presentations – HTTP, FTP

32

Page 33: Presentation - Oracle Net Services

Database Registration with Listener

• Use Dynamic Registrationy g– PMON updates the listener about

• Offered services and available service handlers• Load statistics – frequently updatedLoad statistics frequently updated

– To configure, set in init.ora• LOCAL_LISTENER: Address of listeners on local host• REMOTE LISTENER: Address of listeners on remote hostsREMOTE_LISTENER: Address of listeners on remote hosts

– By default• PMON connects to listener on port 1521

A t ti ll t ith RAC• Automatically setup with RAC

• Remove static SID_LIST configuration in listener.ora– Keep only if you want to remotely start the database

33

p y y y

Page 34: Presentation - Oracle Net Services

Server-side Load Balancing

• Change behavior by setting Connection Load Balancing Goal• Change behavior by setting Connection Load Balancing Goal– Long – for applications with long-lived connections (default)– Short – for applications with short-lived connections

34

Page 35: Presentation - Oracle Net Services

Listener Logon Storm Handler

• Logon storm – Sudden spike in incoming connection rate

• Normal – middle-tier reboot• Abnormal – DoS attack

– Storms cause CPU starvation for existing sessions• Enable the Connection Rate Limiter feature

– Configure in LISTENER ORAConfigure in LISTENER.ORA – Provides end-point level control of throttling

LISTENER=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=sales)(PORT=1521)(RATE_LIMIT=3))(ADDRESS (PROTOCOL t )(HOST l t)(PORT 1522)(RATE LIMIT )))(ADDRESS=(PROTOCOL=tcp)(HOST=lmgmt)(PORT=1522)(RATE_LIMIT=no)))

– Set the Rate Limit to a value that matches your machine capabilities

35

Page 36: Presentation - Oracle Net Services

Logon Storm Comparison

• 150 concurrent connections

RATE_LIMIT = no RATE_LIMIT = 3/sec

sSe

ssio

nsU

sage

%C

PU U

36

Page 37: Presentation - Oracle Net Services

Other Best Practices

• Increase the maximum concurrent requests per end-point– QUEUESIZE parameter in listener.ora– Set to your expected Connection Request rate – Definitely set on Windows

• Do not set a listener password– Listener administration secure by default – OS User Authentication

• Optimize Environment variables for the oracle account– Longer the PATH, longer it takes to fork off the Oracle processg g p

• Ensure that PATH is small• Does not include any network shares

– Cut down the number of environment variables

37

Page 38: Presentation - Oracle Net Services

D t b SDatabase ServerScalability

38

Page 39: Presentation - Oracle Net Services

Oracle Server Architecture Overview

• Choosing the right server architecture is critical to g gmeeting scalability requirements

O l D t b S t th hit t• Oracle Database Server supports three architectures– Dedicated Server (default)– Shared Server aka MTS– Database Resident Connection Pool (11g)

39

Page 40: Presentation - Oracle Net Services

Dedicated Servers

• Each client connection has its own process (thread on Windows)

• Dedicated process ensures lower latencies

• Have to start a new process on connect

• Have to tear down a process on disconnect

• Scalability limits– Memory– Number of Processes

40

Page 41: Presentation - Oracle Net Services

Shared Servers (aka MTS)

• Each server handles multiple clients

• Dispatchers relay requests and responses between clients and servers

• Idle connections will not consume much memory

• Good for large number of connections with many idle

• Latency increase due to man-in-the-middle

41

Page 42: Presentation - Oracle Net Services

Database Resident Connection Pool (11g)

– Pooled dedicated servers h d li tshared across client

systems and processes– Low connect/disconnect

tcosts• Server “locked” on

connect• Server “released” on

disconnect– Low-latency performance

of dedicated servers– Extreme scalability with a

DRCP-capable client driver

42

Page 43: Presentation - Oracle Net Services

Dedicated vs. Shared vs. DRCP

• Use dedicated for:f– High-performance connections

– Active, long-running, data transfer intensive operations

Use shared for:• Use shared for:– Sessions that may be idle for some time– Clients that frequently connect and disconnect

• Use DRCP (11g):– When you have thousands of clients which need access to a

database server session for a short period of timep– Applications mostly use same database credentials, and have

identical session settings– PHP (OCI8 extension), Python (cx_Oracle), Perl (DBI)

43

Page 44: Presentation - Oracle Net Services

Using Shared Servers

• Enable shared servers with init.ora parameters– Becomes new default

• To force server type, specify server type during connect– Dedicated:

sales-server/sales.us.example.com:dedicated

– Shared: sales-server/sales.us.example.com:shared

• Rough guidelines: – 20 or 30 Shared Servers per 500 sessions, then tune from there– 1 dispatcher for every 50-100 sessionsp y

• Significant performance improvements in 11g

44

Page 45: Presentation - Oracle Net Services

Using DRCP

• Pooling is enabled by the DBA usingEXECUTE DBMS_CONNECTION_POOL.START_POOL

('SYS_DEFAULT_CONNECTION_POOL');

• Change connect string on client in tnsnames.ora:(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=sales)(SERVER=pooled)))

• Can use Easy Connect syntax toosqlplus joeuser@sales-server:1521/sales:POOLED

• In test environment, we were able to support more than 20,000 connections to a 2 GB Database Server

• http://www oracle com/technology/tech/php/

45

• http://www.oracle.com/technology/tech/php/

Page 46: Presentation - Oracle Net Services

Scalable Event Models

• Oracle uses the poll system call on most platforms– Poll does not scale well for more than 1000 connections

• Newer, more efficient polling methods now supported on some platformson some platforms

– epoll on Linux – Kernel 2.6– /dev/poll on Solaris and HP-UX (11.2.0.1)

ll t AIX (11 2 0 2)– pollset on AIX (11.2.0.2)– other platforms (in the works)

• Excellent scalability for Shared servers and DRCPy• Enabled by default for DRCP• To enable, set in server sqlnet.ora

46

– USE_ENHANCED_POLL = on

Page 47: Presentation - Oracle Net Services

D t b SDatabase ServerSecurity

47

Page 48: Presentation - Oracle Net Services

Inbound Connect Timeouts

• Limits the time taken for a client to connect and authenticate

• SQLNET INBOUND CONNECT TIMEOUTSQLNET.INBOUND_CONNECT_TIMEOUT – Controls timeout for Database server processes

• INBOUND_CONNECT_TIMEOUT_listener_nameC t l ti t f th li t– Controls timeout for the listener

• Available from 10gR1 onwardsg• Default value of 60 seconds in 10gR2 and above• Independent of client-side timeouts

48

Page 49: Presentation - Oracle Net Services

TCP Valid Node Checks

• Use TCP Invited NodesLi t f IP h t th t itt d t t– List of IPs or hostnames that are permitted to connect

• Use TCP Excluded Nodes– List of IPs or hostnames that are NOT permitted to connectp

• Use CIDR notation and wildcard format for ease of configuration whenever possibleI i d d k d l d d• Invited nodes takes precedence over excluded

• To enable, set in sqlnet.oraVALIDNODE CHECKING = YESO _C C G STCP.INVITED_NODES = (hostname1, hostname2)TCP.EXCLUDED_NODES = (hostname3, hostname4)

49

Page 50: Presentation - Oracle Net Services

Intel Case Study

50

Page 51: Presentation - Oracle Net Services

Advanced Query Performance Tuning – A Case Study from Intel Corporation

Viswanath Ravishankhar([email protected])

Page 52: Presentation - Oracle Net Services

Intel Mfg Decision Support ChallengesIntel Mfg Decision Support Challenges

Data Size (MB)

Data Rate Seen (mbps)

Time Taken (min)

250 ~1 33

1000 ~1 135

Very Slow

• Challenge: Low throughputs on Intercontinental WAN due to:

• Long distances (5K, 10K, or more)• Countries with weak infrastructure

B d id h i i• Bandwidth is expensive• Used for or other IT functions also• Opportunity: Make software more

effective and efficient by:• Inline compression to reduce data size• Inline compression to reduce data size

• Tune Oracle + TCP Stack for higher throughput –real value proposition

H d h O l TCP S k?How do we tune the Oracle + TCP Stack?

Page 53: Presentation - Oracle Net Services

Tuning for WAN EnvironmentsTuning for WAN Environments

Determine appropriate send and receive socket buffer sizes (in

Tuning Parameter DOE Parameters

Socket Buffer 8KB-1MBreceive socket buffer sizes (in sqlnet.ora)

Determine appropriate array size (i SQL*Pl )

Array Size 3000 for SQL*Plus50000 for OCI Client

SDU Size 8KB,16KB,32KB,64KB*

(in SQL*Plus)

Increase SDU Size (in sqlnet.ora)

Increase TCP Window Size beyond

TCP Window Size 64KB-2MB

Bandwidth Delay Product 312KB

64KB (OS function)

Use Bandwidth Delay Product (BDP)

IPERF Max TCP WAN Throughput 4 mbps

* S i l P h f O lUse IPERF to get a benchmark for TCP performance between WAN endpoints Oracle + TCP Tuning is an exercise in

M l V A l

* Special Patch from Oracle

Multi-Variate Analysis

Page 54: Presentation - Oracle Net Services

What we discovered and learnedWhat we discovered and learnedClient

50MB Query Time (Sec)

32K SDU 64K SDU Delta

SQL*Pl 43 26 40%

Larger SDU gave big performance boost after tuning other parameters to optimal values

SQL*Plus 43 26 40%

OCI Client 39 24 39%

p p

Array size level analysis shows that 64KB SDU yields:

I t i ll fQuery Performance at Array Level

Improvement in overall performanceImprovement in consistency of performance

Summary: Overall performance tuning gave the best performance boost for large data extractsMore opportunities exist to improve query performance at network level

Page 55: Presentation - Oracle Net Services

55

Page 56: Presentation - Oracle Net Services

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver anycontract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development release and timing of anyThe development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

56