oracle® jdbc for rdbdownload.oracle.com/otndocs/products/rdb/pdf/rdbjdbc_7341_rn.pdf · 4.2 using...
TRANSCRIPT
Oracle® JDBC for Rdb Release Notes Release 7.3.4.0.5 February 2016
Oracle JDBC for Rdb Release Notes, Release 7.3.4.1.0
Copyright © 2005, 2016 Oracle and/or its affiliates. All rights reserved.
Primary Author: Jim Murray.
Contributing Author:
Contributor: Wolfgang Kobarg-Sachsse.
This software and related documentation are provided under a license agreement
containing restrictions on use and disclosure and are protected by intellectual property
laws. Except as expressly permitted in your license agreement or allowed by law, you
may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute,
exhibit, perform, publish, or display any part, in any form, or by any means. Reverse
engineering, disassembly, or decompilation of this software, unless required by law for
interoperability, is prohibited.
The information contained herein is subject to change without notice and is not warranted
to be error-free. If you find any errors, please report them to us in writing.
If this is software or related documentation that is delivered to the U.S. Government or
anyone licensing it on behalf of the U.S. Government, the following notice is applicable:
U.S. GOVERNMENT RIGHTS Programs, software, databases, and related
documentation and technical data delivered to U.S. Government customers are
"commercial computer software" or "commercial technical data" pursuant to the
applicable Federal Acquisition Regulation and agency-specific supplemental regulations.
As such, the use, duplication, disclosure, modification, and adaptation shall be subject to
the restrictions and license terms set forth in the applicable Government contract, and, to
the extent applicable by the terms of the Government contract, the additional rights set
forth in FAR 52.227-19, Commercial Computer Software License (December 2007).
Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.
This software or hardware is developed for general use in a variety of information
management applications. It is not developed or intended for use in any inherently
dangerous applications, including applications that may create a risk of personal injury. If
you use this software or hardware in dangerous applications, then you shall be
responsible to take all appropriate fail-safe, backup, redundancy, and other measures to
2
ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any
damages caused by use of this software or hardware in dangerous applications.
Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names
may be trademarks of their respective owners.
Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All
SPARC trademarks are used under license and are trademarks or registered trademarks of
SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo
are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a
registered trademark of The Open Group.
This software or hardware and documentation may provide access to or information on
content, products, and services from third parties. Oracle Corporation and its affiliates are
not responsible for and expressly disclaim all warranties of any kind with respect to third-
party content, products, and services. Oracle Corporation and its affiliates will not be
responsible for any loss, costs, or damages incurred due to your access to or use of third-
party content, products, or services.
3
Contents Preface................................................................................................................................. 9
Purpose of This Manual .................................................................................................. 9 Intended Audience .......................................................................................................... 9
Access to Oracle Support ................................................................................................ 9 Document Structure ........................................................................................................ 9 Conventions .................................................................................................................... 9
Chapter 1 Installation and Documentation .................................................................... 11
1.1 Accessing the Documentation................................................................................. 11 1.2 System and Software Requirements ....................................................................... 12 1.3 Installation............................................................................................................... 13
1.3.1 Remove Prior BETA Versions of Oracle JDBC for Rdb Release 7.3.x.x.x ... 13
1.3.2 Contents of the Oracle JDBC for Rdb Kit ....................................................... 14 1.3.3 Installation Procedure ...................................................................................... 16 1.3.4 Rdb Thin driver software on Windows ............................................................ 20
1.3.5 Rdb Thin driver software on Other operating systems .................................... 21 Chapter 2 Enhancements Provided in Oracle JDBC for Rdb Release 7.3.4.1.x. .......... 22
2.1 New Transaction Option AUTOFETCH ................................................................ 22
Chapter 3 Problems Corrected ....................................................................................... 24
3.1 Pool Servers Not Working ...................................................................................... 24 3.2 Problem using Multiprocess Connection Option with the Native JDBC driver ..... 24 3.3 Bumpy-case Connection String Options used with Properties. .............................. 24
3.4 Further Blob problems with Delimited Identifiers.................................................. 25 3.5 Access Violation at RDBJDBCMPSHR73+00227E31 .......................................... 26
Chapter 4 Known Problems and Workarounds ............................................................. 28 4.1 Thin Server Deadlocks ............................................................................................ 28 4.2 Using Java Fast VM on OpenVMS ALPHA .......................................................... 28
4.3 Using the Oracle SQL/Services Management GUI and JDBC Dispatchers ........... 29 4.4 Blob Columns and Correlation Names ................................................................... 29
4.5 Blob Columns and Update Statements ................................................................... 30 4.6 External Procedures and Thin Server ..................................................................... 31
4.7 Limitations .............................................................................................................. 31 4.7.1 Unsupported Methods ...................................................................................... 31 4.7.2 Auto-generated keys ........................................................................................ 33 4.7.3 String Truncation Warnings ............................................................................. 33 4.7.4 Numeric and String Functions in JDBC .......................................................... 33
Chapter 5 New Features and Corrections in Previous Releases .................................... 34 5.1 New Features for Release 7.3.4.0.0 ........................................................................ 34
5.1.1 Create / Drop Database Support ...................................................................... 34
5.2 Corrections in Release 7.3.4.0.0 ............................................................................. 34 5.2.1 Like Escape Throws OutOfBounds Exception ................................................ 35 5.2.2 Correlation Name Workaround for Blobs Fails ............................................... 35 5.2.3 PreparedStatement Cache Failure .................................................................... 35
5.2.4 Blob problem with Delimited Identifiers ......................................................... 36 5.3 New Features for Release 7.3.3.2.x ........................................................................ 36
4
5.3.1 Change Transaction Start Time. ...................................................................... 36 5.4 Corrections in Release 7.3.3.2.0 ............................................................................. 36
5.4.1 NullPointerException when allowing Anonymous ......................................... 37 5.4.2 UnsupportedEncodingException: Binary ........................................................ 37
5.4.3 Alignment Faults when using MP Server ........................................................ 37 5.4.4 ResultSet.absolute() Problems ......................................................................... 38 5.4.5 Orphaned Executor Processes when using Persona ......................................... 38
5.5 New Features for Release 7.3.3.1.0 ........................................................................ 39 5.5.1 Change in Template Configuration Filename .................................................. 39
5.6 Corrections in Release 7.3.3.1.0 ............................................................................. 40
5.6.1 DatabaseMetadata.getColumns Problem with DefaultValue .......................... 40
5.6.2 Show Server Configuration file Problem ......................................................... 40 5.6.3 Unknown Action Message in Log file ............................................................. 41 5.6.4 Severe Performance Degradation in MP Server .............................................. 41 5.6.5 Controller DCL Command line Failure ........................................................... 41
5.6.6 Server Access Restrictions Ignored ................................................................. 42 5.6.7 Datetime Insertion Issues ................................................................................ 43
5.6.8 MP Server may Become CPU Bound .............................................................. 44 5.6.9 Controller Null Pointer Exception when no Default Server ............................ 44 5.6.10 Pool Server Tries to Restart Running Server ................................................. 45
5.6.11 Controller Poll Reopenlogs Hangs................................................................. 46
5.6.12 Pool Server Usage Balancing Problem .......................................................... 47 5.6.13 Configuration File Problem Regression......................................................... 47 5.6.14 Server Configuration Deny User not Enforced .............................................. 47
5.7 New Features for Release 7.3.3.0.x. ....................................................................... 48 5.7.1 Oracle Rdb PID now Displayed ....................................................................... 48
5.7.2 Controller Command Show Executors ............................................................ 49 5.7.3 Extra Timestamp Precision .............................................................................. 49 5.7.4 Nlslang Connection Switch.............................................................................. 50
5.7.5 Use Query Header as Description .................................................................... 51 5.8 Corrections in Release 7.3.3.0.x ............................................................................. 52
5.8.1 Controller START SERVER Problems ........................................................... 52 5.8.2 Executor Initialization Problem ....................................................................... 53 5.8.3 Idle Client Termination breaks Subsequent Connection ................................. 53 5.8.4 Controller STOPSERVER command Problem ................................................ 54
5.8.5 Hang on Connection to Server when using SSL .............................................. 54 5.8.6 DatabaseMetadata Pattern Matches and Nulls ................................................. 55 5.8.7 DatabaseMetadata Missing Index Information ................................................ 55 5.8.8 Forced Client Termination may Crash Thin Server ......................................... 56 5.8.9 Show Clients may cause NullPointerException in Server ............................... 56
5.8.10 AccessViolation in MP Server ....................................................................... 57
5.8.11 Syntax Errors in Insert and Update Statements ............................................. 58
5.8.12 Statement.getGeneratedKeys() throws RdbException ................................... 58 5.8.13 SQLException thrown in ResultSet.isBeforeFirst() ...................................... 59 5.8.14 PreparedStatement executeBatch() Problems ................................................ 59
5.9 New Features for Release 7.3.2.0.x ........................................................................ 60
5
5.9.1 Server Options List Inheritance ....................................................................... 60 5.9.2 Oracle JDBC for Rdb Manager Server ............................................................ 61 5.9.3 Restricting Server Access by IP ....................................................................... 62 5.9.4 Executor Balancing .......................................................................................... 62
5.9.5 MinFreeExecutors ............................................................................................ 62 5.9.6 Executor Reuse ................................................................................................ 63 5.9.7 LogFile Patterns ............................................................................................... 63 5.9.8 New Server Configuration Option retainRdbSQLState ................................... 63 5.9.9 New Connection Option app ........................................................................... 64
5.10 Corrections in Release 7.3.2.0.x ........................................................................... 64
5.10.1 Event Flag Problem with long Executor name Prefixes ................................ 64
5.10.2 Executor Process Termination Problem......................................................... 65 5.10.3 Some Server Characteristics not Correctly Inherited from DEFAULT......... 66 5.10.4 Memory Problem with Pool Servers and Java 1.6.0-2................................... 67 5.10.5 Exception not Thrown when Record Locked during Update ........................ 68
5.10.6 Classpath Documentation Error ..................................................................... 68 5.11 New Features for Release 7.3.1.0.x ...................................................................... 69
5.11.1 “Owner” may be used in XML Configuration Files ...................................... 69 5.11.2 SQL Statement Restriction and Denial .......................................................... 70 5.11.3 Event Notification .......................................................................................... 70
5.12 Corrections in Release 7.3.1.0.x ........................................................................... 70
5.12.1 Multi-process Server Connection Hang when Executor Dies ....................... 71 5.12.2 Multi-process Executor Process Terminates Unexpectedly .......................... 71 5.12.3 Pooled Server AutoRestart Problem .............................................................. 72
5.12.4 getGeneratedKeys() and OutOfBounds Exception ........................................ 72 5.12.5 Multi-process Server fails when Persona Used ............................................. 73
5.12.6 RestrictAccess being Applied even when Disabled ....................................... 74 5.12.7 Multi-process Problem in the Native Driver .................................................. 75
5.13 New Features for Release 7.3.0.2.x ...................................................................... 75
5.13.1 Server Network Keep Alive ........................................................................... 75 5.14 Corrections in Release 7.3.0.2.x ........................................................................... 76
5.14.1 Null pointer Exception during Server viability check by Pool Server........... 76 5.14.2 MINUS and INTERSECT Problem ............................................................... 76 5.14.3 Memory Leak when Executor Process fails to Run ....................................... 76 5.14.4 Lost Executor not caught by Multi-process Server........................................ 77
5.14.5 Multi-process Native Driver Problem ............................................................ 77 5.14.6 PreparedStatement.getGeneratedKeys() Problem.......................................... 77 5.14.7 Excessive IOs during Metadata Retrieval ...................................................... 78 5.14.8 Syntax error SQL-F-CONVARUND ............................................................. 78 5.14.9 Multi-process Server Hang ............................................................................ 78
5.14.10 SSL Socket Intrusion Problem ..................................................................... 79
5.15 New Features for Release 7.3.0.1.x ...................................................................... 79
5.15.1 Reopen Server Log files using Poll Subcommand ........................................ 79 5.16 Corrections in Release 7.3.0.1.x ........................................................................... 80
5.16.1 Show Clients not Showing Column Names ................................................... 80 5.16.2 Batched Statement Fails with MULTIPLE_RECORDS Exception .............. 81
6
5.16.3 Incompatibility between 7.3.0.0 Thin Driver and Prior Release Servers ...... 82 5.16.4 Global Memory leak when Executors are Run-down .................................... 82 5.16.5 Autorestart on Pooled Servers not Working .................................................. 83 5.16.6 setFetchSize() hint Ignored by PreparedStatement ........................................ 83
5.16.7 Missing Stmt Exception on Subsequent Execution of PreparedStatement .... 84 5.16.8 EOFException on READ_ROW with Nested Statements ............................. 84 5.16.9 DatabaseMetaData.getUDTs() ....................................................................... 85 5.16.10 Using Multi-process with the JDBC Native Driver ..................................... 86 5.16.11 Prepared Statement not Closing underlying Cursor ..................................... 86
5.16.12 Release Statement Synchronization Problem .............................................. 87
5.16.13 Unitialized SQLCA Block in MP server ..................................................... 87
5.16.14 Controller SHOW CLIENTS and MP Server Problem ............................... 88 5.16.15 Documentation Error – Record Streaming .................................................. 89 5.16.16 ResultSet.updateRow() and ResultSet.deleteRow() Problem ...................... 89 5.16.17 Problem using Column Renaming with dbkey ............................................ 89
5.16.18 Class cast error on Scaled integer Retrieval after ResultSet.insertRow() .... 90 5.16.19 ResultSet.deleteRow() Behaviour Change ................................................... 91
5.16.20 Underlying Blob Handles not Released when using ResultSet.getBlob() ... 92 5.16.21 Sequence Values not Visible to ResultSet get Methods using Column Name
................................................................................................................................... 93
5.16.22 Scaled Integer Problem ................................................................................ 95
5.16.23 Server Matching Exception may Stop Poll Handling .................................. 95 5.17 New Features for Release 7.3.0.0.x ...................................................................... 96
5.17.1 Shutdown Thread ........................................................................................... 96
5.17.2 Driver.attach() ................................................................................................ 96 5.17.3 Returning List of Known Databases .............................................................. 97
5.17.4 Controller Enhancements ............................................................................... 97 5.17.5 RDB_EXT.JAR file ....................................................................................... 97 5.17.6 Performance Enhancements ........................................................................... 99
5.18 Corrections in Release 7.3.0.0.x ......................................................................... 100 5.18.1 Server Startup Failure when using CFG File ............................................... 100
5.18.2 AccessViolation on Disconnect when Inserting Blobs ................................ 101 5.18.3 PreparedStatement and Parameter Markers Known Problem now Resolved
................................................................................................................................. 101 5.18.4 Controller SHOW CLIENTS and MP Server Problem ............................... 102
5.18.5 Possible Memory Leak when Updating Blob Columns ............................... 103 5.18.6 Access Violation with Trace and Network Dump ....................................... 103 5.18.7 Named Input Parameters not Working with CallableStatements ................ 104
5.19 New Features for Release 7.2.5.5.x .................................................................... 105 5.20 Corrections in Release 7.2.5.5.x ......................................................................... 105
5.20.1 Long-running Query Holds up New Connections in MP Server ................. 105
5.21 New Features for Release 7.2.5.4.x .................................................................... 106
5.22 Corrections in Release 7.2.5.4.x ......................................................................... 106 5.22.1 Access Violation at Java_rdb_JNI_SetStrVal ............................................. 106 5.22.2 DCL Command Line Too Long ................................................................... 107
7
5.22.3 Access Violation during DriverManager.getConnection() when Database
Specification is Missing .......................................................................................... 107 5.22.4 Unaligned Memory Faults on IA64 ............................................................. 108 5.22.5 Read-Only Transactions not Enforced on Connection Switch .................... 108
5.22.6 Sockets not Correctly Closing on OpenVMS Clients causing Accumulation of
Mailboxes ................................................................................................................ 109 5.22.7 Cast problem when Converting String to Date/Time .................................. 109
5.23 New Features for Release 7.2.5.3.x .................................................................... 111 5.24 Corrections in Release 7.2.5.3.x ......................................................................... 111
5.24.1 Interaction of DatabaseMetaData methods with Blobs may Crash the Thin
Server ...................................................................................................................... 111
5.24.2 BigDecimal scaling Incorrect when used with PreparedStatement SetObject()
Methods................................................................................................................... 112 5.24.3 Connection.nativeSQL() method Throws Null Pointer Exception .............. 112 5.24.4 Calling Resultset.isLast() method May Change Transaction Behavior ....... 112
5.25 New Features for Release 7.2.5.2.x .................................................................... 113 5.25.1 DEC_KANJI and DEC_HANZI Support Enabled ...................................... 113
5.26 Corrections in Release 7.2.5.2.x ......................................................................... 113 5.26.1 ResultSet.getBigDecimal() not Working with System ResultSets .............. 113 5.26.2 Setting TraceLevel fails when using Hexadecimal Notation ....................... 114
5.26.3 Delimited Identifier Problem in AS clause of Select Statement .................. 114
5.26.4 Configuration file problem in "DEFAULT" Server Definition ................... 114 5.26.5 Pool Server May choose Incompatible Pooled Server when User Restriction
Enabled ................................................................................................................... 115
5.26.6 Potential Problem when Dumping SQLDA in Trace .................................. 116 5.26.7 Connection.getCatalog() Returns Wrong Value for Single Schema Databases
................................................................................................................................. 116 5.26.8 Potential Memory Leak with Views ............................................................ 117
5.27 New Features for Release 7.2.5.1.x .................................................................... 117
5.27.1 SQLDA Dumping ........................................................................................ 117 5.27.2 failSAFE IP with Pool Servers .................................................................... 117
5.27.3 HandshakeTries and HandshakeWait on Multi-process Native Connections
................................................................................................................................. 118 5.27.4 Server Access Security Enhancements ........................................................ 118 5.27.5 Restriction on using Multiple Blob fields in Join now Removed ................ 118
5.28 Corrections in Release 7.2.5.1.x ......................................................................... 119 5.28.1 Incorrect Row Number Returned after ResultSet.getLast() call .................. 119 5.28.2 Pool Server Startup of Pooled Servers may fail When Persona is Used ..... 120 5.28.3 Last Column in Select List may be Inaccessible in Some Queries .............. 121 5.28.4 Abnormal Client Termination may Prevent Executor Re-use ..................... 121
5.28.5 Decimal Column Problem with Native Driver ............................................ 122
5.28.6 'EFN xx is not available' Message on Executor Startup .............................. 122
5.28.7 Extraneous log message during Auto-restart check by Pool Server ............ 123 5.28.8 Logfile not Correctly set for Servers Started Using the Controller ............. 123
5.29 New Features for Release 7.2.5.0.x .................................................................... 123 5.29.1 Persona ......................................................................................................... 123
8
5.30 Corrections in Release 7.2.5.0.x ......................................................................... 124 5.30.1 Incorrect SQLSRV_JDBC_SERVER_STARTUP72 Installed with V7.2-41
Oracle JDBC for Rdb Kit ........................................................................................ 124 5.30.2 Multi-process Server May Show Continuous DIO Activity Even When Idle
................................................................................................................................. 124 5.30.3 Client idleTimeout Does Not Work for Prestarted and Reused Executors .. 125 5.30.4 Syntax Error in Query Generated for DatabaseMetaData.getTables ........... 125 5.30.5 Show Clients in Controller may Crash Connected Thin Server .................. 126
5.31 New Features for Release 7.2.4.1.x .................................................................... 127
5.31.1 Client and Server Timeout Feature .............................................................. 127
5.31.2 Executor Name Prefix .................................................................................. 127
5.32 Corrections in Release 7.2.4.1.x ......................................................................... 127 5.32.1 Release Notes Specify Incorrect Installation Directory for
RDBJDBCCFG.XML ............................................................................................. 127 5.32.2 Persona Not Handled Correctly by the Multi-process and Pool Servers ..... 128
5.32.3 Multi-process Server / Executor Handshake Timeout May Be Too Short on
Heavily Loaded Systems......................................................................................... 128
5.32.4 Problems with srv.idleTimeout and srv.bindTimout Configuration Variables
and Their Use with SSL servers.............................................................................. 129 5.32.5 IA64 Problem Causes Array Out of Bounds Exception When Handling String
Indexing .................................................................................................................. 130
5.32.6 Comments within SQL Text Not Handled Correctly .................................. 130 5.32.7 Prepared Statements May Cause a Memory Leak with Multi-process Servers
................................................................................................................................. 131
5.33 Corrections in Release 7.2.4.0.x ......................................................................... 132 5.33.1 Maximum Size of Single Data Row Increased to 65,272 Octets ................. 132
5.33.2 Another Connection Overlap Window Found with Pool Servers ................ 132 5.33.3 SSL Server Information Not Correctly Set from XML-Formatted
Configuration File ................................................................................................... 132
9
Preface
Purpose of This Manual
The Oracle JDBC for Rdb 7.3.4.1.0 release notes summarize new features,
corrections to software, restrictions, workarounds, and problems. They also include
new features and corrections provided in releases 7.2.4.0.0. through 7.3.4.0.x. These
release notes cover Oracle JDBC for Rdb for OpenVMS on both Alpha and Integrity
Servers.
Intended Audience
This document is intended for users responsible for:
● System management
● Database administration
● Application programming
Access to Oracle Support
Oracle customers have access to electronic support through My Oracle Support. For
information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit
http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.
Document Structure
This document consists of five chapters:
Chapter 1 Describes location of documents and installation directions.
Chapter 2 Describes new features and technical changes in this release.
Chapter 3 Describes corrected software errors in this release.
Chapter 4 Describes known problems, restrictions, and workarounds.
Chapter 5 Describes new features and corrected software errors in
releases 7.2.4.0.0 through 7.3.4.0.x.
Conventions
Oracle JDBC for Rdb is often referred to as JDBC.
10
Hewlett-Packard Company is often referred to as HP.
The following conventions are used in this document:
word A lowercase word in a format example indicates a syntax
element that you supply.
[ ] Brackets enclose optional clauses from which you can choose
one or none.
{ } Braces enclose clauses from which you must choose one
alternative.
... A horizontal ellipsis means you can repeat the previous item.
.
.
.
A vertical ellipsis in an example means that information not
directly related to the example has been omitted.
Conventions in Code Examples
Code examples illustrate Java code, SQL or other command-line statements. They
are displayed in a monospace (fixed-width) font and separated from normal text as
shown in this example:
SELECT last_name FROM employees WHERE last_name = 'TOLIVER';
The text of exception messages that may be raised are also displayed using the same
convention.
▲contents
11
Chapter 1 Installation and
Documentation
This chapter contains installation and documentation information for Oracle JDBC
for Rdb 7.3.4.1.x.
1.1 Accessing the Documentation
You can extract release notes or an Oracle JDBC for Rdb document from the PCSI kit
prior to installation by following one of these procedures:
● To extract a copy of the release notes, define PCSI$SOURCE to point to the
location (device name and directory) of the PCSI kit. Then, enter the PRODUCT
EXTRACT RELEASE_NOTES command followed by the product name at the DCL
prompt.
$ DEFINE PCSI$SOURCE DKA400:[KITS]
$ PRODUCT EXTRACT RELEASE_NOTES RDBJDBC73
● To extract a list of files contained in a software product kit, define
PCSI$SOURCE to point to the location (device name and directory) of the PCSI kit.
Then, enter the PRODUCT LIST command followed by the product name at the DCL
prompt.
$ DEFINE PCSI$SOURCE DKA400:[KITS]
$ PRODUCT LIST RDBJDBC73
● To extract a specified file, define PCSI$SOURCE to point to the location (device
name and directory) of the PCSI kit. Then, enter the PRODUCT EXTRACT FILE
command followed by the product name and file name at the DCL prompt.
$ DEFINE PCSI$SOURCE DKA400:[KITS]
$ PRODUCT EXTRACT FILE RDBJDBC73/SELECT=filename.ext
The Oracle JDBC for Rdb documentation is also available on My Oracle Support and
OTN.
The installation procedure copies the Oracle JDBC for Rdb release notes to the
SYS$HELP directory.
12
1.2 System and Software Requirements
Oracle JDBC for Rdb requires the following software products to be installed:
Software Minimum Version
Alpha Integrity
HP OpenVMS V8.2 V8.2-1
HP Java tm
SDK/RTE V5.0-1
(1.5.0-1)
V5.0-1
(1.5.0-1)
Oracle Rdb V7.2.1 V7.2.1
On the client side, you must install the following software product in order to use the
Oracle JDBC for Rdb Thin driver:
Software Minimum Version
Java tm
SDK/RTE V1.5.0-1
In addition, if you need to start and stop Oracle JDBC for Rdb servers using Oracle
SQL/Services, the following product must be installed:
Software Minimum Version
Alpha Integrity
Oracle
SQL/Services V7.1.6 V7.2
Detailed information about installing Hewlett-Packard Java for OpenVMS system
may be found at the following web site:
http://www.hp.com/java.
Documentation for HP's Java for OpenVMS system may be found at the following
web sites:
http://h18012.www1.hp.com/java/documentation/index.html
13
In line with HP recommendations for Java applications, Oracle recommends the
following minimum quota setting on accounts used to start up Thin servers, in
particular those used to start Multi-process servers.
UAF Fillm 4096
Channelcnt 4096
Wsdef 4096
Wsquo 8192
Wsextent and Wsmax 32768
Pgflquo 3145728
bytlm 4000000
biolm 150
diolm 150
tqelm 100
Be sure to set your systems quotas appropriately to accommodate these process
quotas.
See the Java for OpenVMS release notes for more information on OpenVMS quotas
and resources required by Java.
Also refer to your Oracle Rdb documentation for recommendations on OpenVMS
quotas required for Oracle Rdb.
1.3 Installation
This section describes how to install Oracle JDBC for Rdb and includes a sample log.
1.3.1 Remove Prior BETA Versions of Oracle JDBC for Rdb Release 7.3.x.x.x
If you were participating in a BETA trial of Oracle JDBC for Rdb 7.3.x.x.x then you
must remove any previously installed BETA kits before proceeding with the
installation of this release.
Failure to remove previous 7.3 kits may prevent Oracle JDBC for Rdb from
functioning correctly. In particular, several changes have been made to the
client/server communication protocol during the life of the 7.3 BETA releases that
may cause connection failures if 7.3 BETA thin driver jars are used to connect to a
7.3 server or vice-versa.
14
In addition, ensure that all deployed copies of the 7.3.x.x.x BETA rdbThin.jar are
replaced. If not, connection failures may result in the applications using these BETA
driver jars.
1.3.2 Contents of the Oracle JDBC for Rdb Kit
The Oracle JDBC for Rdb kit uses OpenVMS Polycenter to simplify the installation
of the product. Please refer to your OpenVMS documentation on the use of
OpenVMS Polycenter.
The Oracle JDBC for Rdb kit product installation file is named ORCL-pppVMS-
RDBJDBC73-V0703-xxxxxx-1.PCSI where ppp will be the platform and xxxxxx
will be the build instance of this kit, for example:
ORCL-AXPVMS-RDBJDBC73-V0703-0V0A18-1.PCSI
or ORCL-I64VMS-RDBJDBC73-V0703-0V0A18-1.PCSI
The installation file is located in the RDBJDBC directory of the Rdb Software
distribution CD. If you obtained the Oracle JDBC for Rdb kit from the Web, the
installation file is contained in the RDBJDBCV73xxxxx.ZIP file, where xxxxx refers
to the build instance of the kit.
The installation kit is comprised of the following files:
BUILD_CERTS.COM
Command procedure example
of building certificates for
SSL.
OracleJDBCForRdbClient73000.msi
OracleJDBCForRdbClient73000X64.msi
Microsoft installer file for
client-side software
installation on Windows.
RDBJDBCCHECKUP.CLASS Use to verify the installation
of this kit.
RDBJDBCCHECKUP.JAVA Use to verify the installation
of this kit.
RDBJDBCEXEC73.EXE Executor image in conjunction
with a Multi-process server.
RDBJDBCCFG.XML Example XML formatted
configuration file.
RDBJDBCSHR73.EXE Shared image required for
Oracle Rdb database access.
RDBJDBCMPSHR73.EXE Shared image required for
15
Multi-process Oracle Rdb
database access.
RDBJDBC_EXECCLI.COM CLI helper command
procedure.
RDBJDBC_INSTALL.COM
Installation command
procedure used by Polycenter
during installation.
RDBJDBC_STARTEXEC.COM
Command procedure used by
Oracle JDBC for Rdb Multi-
process server to start up an
executor process.
RDBJDBC_STARTSRV.COM
Command procedure used
when Oracle JDBC for Rdb
servers are started up from the
Oracle JDBC for Rdb
controller.
RDB_EXT.JAR
Java jar file containing classes
and java code for extensions
to Oracle JDBC for Rdb.
RDBNATIVE.JAR
Java jar file containing the
classes for the Oracle JDBC
for Rdb native driver.
RDBTHIN.JAR
Java jar file containing the
classes for the Oracle JDBC
for Rdb thin driver.
RDBTHINSRV.JAR
Java jar file containing the
classes for the Oracle JDBC
for Rdb servers.
RDBTHINCONTROL.JAR
Java jar file containing the
classes for the Oracle JDBC
for Rdb controller.
RDBTHINSRVPOOL.JAR
Java jar file containing the
classes for the Oracle JDBC
for Rdb pool server.
RDBMANSRV.JAR
Java jar file containing the
classes for the Oracle JDBC
for Rdb manager server.
RDBJDBC_<version>_RELNOTES.PDF Oracle JDBC for Rdb Release
Notes.
RDBJDBC_<version>.RELEASE_NOTES Text version of Oracle JDBC
for Rdb release notes.
16
RDBJDBC_USERGUIDE.PDF User guide.
SQLSRV_JDBC_SERVER_STARTUP*.COM
Command procedures used by
Oracle SQL/Services to start
up an Oracle JDBC for Rdb
server.
WATCHEVENTS.JAR
Sample application for
watching Oracle JDBC for
Rdb server events.
Note
The HTML version of the user guide and release notes are no longer supplied.
1.3.3 Installation Procedure
Follow these steps to install the Oracle JDBC for Rdb kit:
1. If you obtained the kit in ZIP format, restore the kit file to a temporary directory:
$ unzip RDBJDBCV73xxxx.ZIP -d MY_DIR
This will unzip the Polycenter kit for Oracle JDBC for Rdb and you will have access
to the PCSI file, ORCL-pppVMS-RDBJDBC73-V0703-xxxxxx-1.PCSI, where ppp is
the platform and xxxxxx is the build instance of this kit.
2. Use the Polycenter PRODUCT command to install the kit.
Details of the version of the kit will be displayed and you will be asked if you want to
proceed. The following examples of installation on an ALPHA system assume the kit
build instance is 0V0A18, and that the directory where the PCSI file can be found is
MY_DIR.
$ PRODUCT INSTALL RDBJDBC73/SOURCE=MY_DIR
The following product has been selected:
ORCL AXPVMS RDBJDBC73 V7.3-0V0A18 Layered Product
[Installed]
Do you want to continue? [YES]
Configuration phase starting ...
17
You will be asked to choose options, if any, for each selected
product and for any products that may be installed to satisfy
software dependency requirements.
ORCL AXPVMS RDBJDBC73 V7.3-0V0A18: Oracle JDBC for Rdb
Copyright © 1995, 2010,Oracle Corporation. All Rights Reserved.
This product does not have any configuration options.
Execution phase starting ...
The following product will be installed to destination:
ORCL AXPVMS RDBJDBC73 V7.3-0V0A18
DISK$AXPVMSSYS:[VMS$COMMON.]
Portion done: 0%...10%...30%...40%...50%...60%...70%...80%...90%
Oracle JDBC for Rdb has been successfully installed in :
DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.0703-0V0A18]
To help you setup the required logical names, a file named
RDBJDBC_STARTUP.COM has been added to this installation directory
RDBJDBC_STARTUP.COM:
$! Oracle JDBC for Rdb startup command procedure
$!
$ DEFINE/SYSTEM RDB$JDBC_HOME -
DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.0703-0V0A18]
$ DEFINE/SYSTEM RDB$JDBC_LOGS -
DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.logs]
$ DEFINE/SYSTEM RDB$JDBC_COM -
DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.com]
$ DEFINE/SYSTEM RDBJDBCSHR RDB$JDBC_HOME:RDBJDBCSHR73.EXE
$ DEFINE/SYSTEM RDBJDBCMPSHR RDB$JDBC_HOME:RDBJDBCMPSHR73.EXE
$ DEFINE/SYSTEM RDBJDBCEXEC RDB$JDBC_HOME:RDBJDBCEXEC73.EXE
...100%
The following product has been installed:
ORCL AXPVMS RDBJDBC73 V7.3-0V0A18 Layered Product
The installation procedure will copy all the kit files to the appropriate Oracle JDBC
for Rdb product directory in the SYS$COMMON:[RDB$JDBC] directory, for
example:
SYS$COMMON:[RDB$JDBC.0703-0V0A18]
18
If they are not already present, the installation procedure will create two new
directories, SYS$COMMON:[RDB$JDBC.LOGS] and SYS$COMMON:[RDB$JDBC.COM].
Note
During installation a generic configuration file RDBJDBCCFG_TEMPLATE.XML
will be copied to the RDB$JDBC_HOME directory. Also during installation, if the
SYS$COMMON:[RDB$JDBC.COM]directory does not already contain a file named
RDBJDBCCFG.XML, the contents of the configuration template file will be used to
create this file.
By default, as the logical name RDB$JDBC_COM points to the
SYS$COMMON:[RDB$JDBC.COM] directory, it is this directory that the Oracle
SQL/Services JDBC dispatcher will use when searching for a configuration file to
use during server startup. ( See the sections JDBC Dispatcher and Determining the
server configuration file in the Oracle JDBC for Rdb User guide for more details).
The RDBJDBCCFG_TEMPLATE.XML found in the RDB$JDBC_HOME directory
will be replaced each time you install Oracle JDBC for Rdb, however, any existing
RDBJDBCCFG.XML file found in the RDB$JDBC_COM directory will not be
replaced. Oracle recommends to use
RDB$JDBC_HOME:RDBJDBCCFG_TEMPLATE.XML only as a template file and
not to use this file in production.
$ dir sys$common:[rdb$jdbc]/col=1
Directory SYS$COMMON:[RDB$JDBC]
0703-0V0A18.DIR;1
COM.DIR;1
LOGS.DIR;1
In addition, the command procedures SQLSRV_JDBC_SERVER_STARTUP*.COM
will be copied to the system specific SYS$MANAGER directory.
3. Use the command procedure RDBJDBC_STARTUP.COM found in the Oracle
JDBC for Rdb product installation directory to define the required system logical
names:
RDB$JDBC_HOME to point to the installation home.
$ define/system RDB$JDBC_HOME SYS$COMMON:[RDB$JDBC.0703-0V0A18]
19
RDB$JDBC_LOGS to point to the Oracle JDBC for Rdb log directory.
$ define/system RDB$JDBC_LOGS SYS$COMMON:[RDB$JDBC.LOGS]
RDB$JDBC_COM to point to the Oracle JDBC for Rdb command directory.
$ define/system RDB$JDBC_COM SYS$COMMON:[RDB$JDBC.COM]
RDBJDBCSHR to point to the shared image RDBJDBCSHR73.EXE.
$ define/system RDBJDBCSHR –
SYS$COMMON:[RDB$JDBC.0703-0V0A18]RDBJDBCSHR73.EXE
RDBJDBCMPSHR to point to the shared image RDBJDBCMPSHR73.EXE.
$ define/system RDBJDBCMPSHR –
SYS$COMMON:[RDB$JDBC.0703-0V0A18]RDBJDBCMPSHR73.EXE
RDBJDBCEXEC to point to the shared image RDBJDBCEXEC73.EXE.
$ define/system RDBJDBCEXEC –
SYS$COMMON:[RDB$JDBC.0703-0V0A18]RDBJDBCEXEC73.EXE
You must define the RDB$JDBC_HOME logical name if you want to use a Thin
Multi-process server or use the Controller or Pool servers or the SQL/Services JDBC
dispatcher to start server processes.
4. Include the rdbnative.jar and rdbthin.jar files in your Java CLASSPATH by using
either the logical names CLASSPATH or JAVA$CLASSPATH or the -classpath
option on the Java command line:
$ define JAVA$CLASSPATH -
[],RDB$JDBC_HOME:RDBNATIVE.JAR,RDB$JDBC_HOME:RDBTHIN.JAR
5. Test your installation using the "RdbJdbcCheckup" Java class in the
RDBJDBCCHECKUP.CLASS file. During the installation
RDBJDBCCHECKUP.CLASS is copied to RDB$JDBC_HOME.
Copy this file to your default directory and then you can invoke it using Java.
You will be prompted for a username and password and an Oracle Rdb database to
test the installation against. If the test succeeds, the text "Your JDBC installation is
correct." is displayed.
20
$ java "RdbJdbcCheckup"
Please enter information to test connection to the database
user: my_username
password: my_password
database: my_db_dir:personnel
Connecting to the database...Connecting
connected.
Hello World
Your JDBC installation is correct.
$
Test the Thin server by using the following commands:
$spawn/nowait/proc=rdbthinsrvtest java -jar rdbthinsrv.jar
$java "RdbJdbcCheckup" "-t"
Please enter information to test connection to the database
user: my_username
password: my_password
database: my_db_dir:personnel
Connecting to the database...Connecting...
connected.
Hello World
Your JDBC installation is correct.
$stop rdbthinsrvtest
Note
As Java is a case-sensitive language, it is important to specify class and
method names exactly as they are described in the various APIs. By
default, the OpenVMS operating system uppercases command line
parameters unless you surround them with double quotation marks.
1.3.4 Rdb Thin driver software on Windows
If you are developing or deploying Windows applications that use the Oracle JDBC
for Rdb thin driver, you will have to copy the provided RDBTHIN.JAR file to each
of the Windows systems you will be using. In addition you should consult your
application, IDE or Microsoft Windows software guides to determine how to let the
application or development environment know where the Rdb thin driver jar can be
found.
In order to facilitate installation of the Rdb thin driver on your Windows client
systems, included in the Oracle JDBC for Rdb installation kit are two Microsoft
Software Installation images, OracleJDBCForRdbClient73000.msi and
OracleJDBCForRdbClient73000X64.msi that may be used on your client Windows
systems to install the RdbThin and the RdbThinControl jars.
21
The OracleJDBCForRdbClient73000X64.msi may be used on Windows 64 Bit
systems. OracleJDBCForRdbClient73000.msi can also be used on Windows 64 Bit
systems; however the installation will be placed in the 32 bit subsystem.
Once the appropriate MSI file has been copied to your Windows system, double-click
the filename to invoke the Microsoft installer, and then follow the directions provided
by the installation Wizard.
This installation will place a copy of the RdbThin and RdbThinControl jars as well as
the current JDBC documentation into the designated installation directory on your
Windows system.
In addition, pointers to the uninstall procedure, the Rdb Thin Controller shortcut and
documentation will be added to your Program Menu.
1.3.5 Rdb Thin driver software on Other operating systems
If you are developing or deploying applications that use the Oracle JDBC for Rdb
thin driver, you will have to copy the provided RdbThin.jar file to each of the
systems you will be using.
You should consult your application, IDE or operating system software guides to
determine how to let the application or development environment know where the
Rdb thin driver jar can be found.
▲contents
22
Chapter 2 Enhancements Provided in
Oracle JDBC for Rdb Release 7.3.4.1.x.
This chapter describes new and changed features in Oracle JDBC for Rdb release
7.3.4.1.x.
2.1 New Transaction Option AUTOFETCH Release 7.3.4.1.0.
Also available in Release 7.3.4.0.4.
When AUTOCOMMIT is enabled, JDBC will automatically commit transactions at
the end of the execution of a statement.
Sometimes during long-duration client-side read operations it may be advantageous
to commit the current transaction more frequently, to prevent the read-only
transaction from locking out other database operations.
For example, when using SQLDeveloper to read through Rdb records using Oracle
JDBC for Rdb, records are delivered to the client application in groups, where the
number of records in a record group depends on the FETCHSIZE specified for the
statement or session. As you scroll down a list of records, the application may
request the next group of records from the server. This may mean that if you have
not finished scrolling through all the records in the retrieval set, there may still be a
transaction outstanding on the server waiting for the rest of the records to be
requested. If you leave this browse window open for an extended duration, this
could cause Read-Only transaction lockouts on the database.
JDBC now allows you to specify that transactions should be auto-committed each
time the server sends a FETCHSIZE number of records back to the client. This
means that while the client is browsing the current group of records, that no
transaction will be outstanding on the server.
A new connection string option “@TRANSACTION=AUTOFETCH” may be used
to inform JDBC that auto-commit is required each time the server sends
FETCHSIZE groups of records.
23
In addition the server configuration option “TRANSACTION=AUTOFETCH” is
also available to set the default transaction action for all connections that are made to
that server.
A second connection string option “@TRANSACTION=AUTOREADFETCH” is
also available and can be used to inform JDBC that, like the AUTOFETCH option,
auto-commit is required each time the server sends FETCHSIZE groups of records,
but when establishing a new transaction, if not otherwise explicitly specified, a Read-
Only transaction should be started.
See your JDBC documentation on FETCHSIZE and how to specify the number of
records to retrieve during client/server fetch operations. The application you are
using may also have documentation on how to specify the FETCHSIZE when using
JDBC drivers.
▲contents
24
Chapter 3 Problems Corrected
This chapter describes software errors corrected in Oracle JDBC for Rdb release
7.3.4.1.x.
3.1 Pool Servers Not Working
Fixed in Instance Build 20160205 release 7.3.4.1.0.
Also fixed in Instance Build 20150626 release 7.3.4.0.2.
A problem introduced in release 7.3.4.0.0 prevents pool servers from correctly
passing on client connection requests to the chosen pooled server.
The client application may receive an EOFException when trying to connect to
Rdb using a pool server.
This has now been fixed.
3.2 Problem using Multiprocess Connection Option
with the Native JDBC driver
Fixed in Instance Build 20160205 release 7.3.4.1.0.
Also fixed in Instance Build 20150825 release 7.3.4.0.3.
A problem introduced in release 7.3.4.0.0 prevents the use of the @multiProcess
connection option when used in conjunction with the JDBC Native driver.
The following exception will be raised when the multiprocess switch is used:
java.lang.NullPointerException
at oracle.rdb.jdbc.util.Executor.runFromJAVA(Executor.java:155)
at oracle.rdb.jdbc.common.NativeConnect.connect(NativeConnect.java:284)
at oracle.rdb.jdbc.common.NativeConnect.connect(NativeConnect.java:94)
This has now been fixed.
3.3 Bumpy-case Connection String Options used with
Properties.
25
Fixed in Instance Build 20160205 release 7.3.4.1.0.
Also fixed in Instance Build 20150825 release 7.3.4.0.3.
As documented in the JDBC User Guide, some connection string options may
contain both upper and lower cased characters in their names (see section Connection
Options in the Oracle JDBC for Rdb User Guide).
A problem exists when using an option that has at least one upper-cased character in
its name. If the option is used within a Properties object passed to the
DriverManager.getConnection() method, JDBC may fail to recognized the option
and silently ignore it. For example, the option multiProcess used within a JDBC
Native driver connection may fail to be recognized if used in Properties:
String personnel="jdbc:rdbNative:personnel$db";
Properties props=new Properties();
props.put("user",user);
props.put("password",pass);
props.put("multiProcess","true");
Connection conn=DriverManager.getConnection(personnel, props);
A work around is to use the option directly on the URL connection string:
String personnel="jdbc:rdbNative:personnel$db@multiProcess=true"; Connection conn=DriverManager.getConnection(personnel,
user,pass);
3.4 Further Blob problems with Delimited Identifiers
Fixed in Instance Build 20160205 release 7.3.4.1.0.
Also fixed in Instance Build 20150827 release 7.3.4.0.3.
The problem as discussed in release note 3.4 Blob Problem with Delimited Identifiers
above was not completely solved. It is possible that problems may still exist when
blobs take part in an Insert statement.
In particular if the table name associated with a segmented string is referenced in the
text of an INSERT statement is not fully uppercased and no delimited identifiers are
used in the statement then JDBC will fail with a syntax error:
oracle.rdb.jdbc.common.RdbException: Invalid column name
26
In addition, due to a problem introduced in release 7.3.4.0.0. and release 7.3.3.2.5. it
is possible that simple selection of segmented strings from rdb tables may fail with
an exception similar to:
%SQL-F-RELNOTDEF, Table xxxxxxx is not defined in database or schema
These problems have now been fixed.
3.5 Access Violation at
RDBJDBCMPSHR73+00227E31
BUG 22233633
Fixed in Instance Build 20160205 release 7.3.4.1.0.
Also fixed in Instance Build 20151206 release 7.3.4.0.5.
During the run down of executors by the MP Server it is possible that an internal
error in memory handling may cause an Access Violation within the MP server
process similar to the following:
%SYSTEM-F-ACCVIO, access violation, reason mask=04,
virtual address=00000000000000CA, PC=FFFFFFFF904ED491,
PS=0000001B
If a stack trace is present or a system dump analysis of the errant process is done, it
may show reference to a PC at or near the following location:
RDBJDBCMPSHR73+00227E31
(This PC offset may differ depending on the version of JDBC installed; the value
above was seen when running Oracle JDBC for Rdb release 7.3.4.0. kit 0703-
4V0F6P)
This problem appears to occur only on Itanium systems and may occur when the
server node is very busy and is more likely to occur during the time an executor
process is being run-down.
Although this is the primary access violation, due to an error in the exception frame
handling by JAVA, the server process may also encounter a rapid iteration of access
violations similar to:
%SYSTEM-F-ACCVIO, access violation, reason mask=04, virtual
address=00000000000000CA, PC=FFFFFFFF904ED491, PS=0000001B
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=0000000000000000, PC=FFFFFFFF806BC5D0, PS=0000001B
27
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=0300B7590200BB2A, PC=00000000011D9820, PS=0000001B
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=0000000000000000, PC=FFFFFFFF806BC5D0, PS=0000001B
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=0000000000000000, PC=FFFFFFFF806BC5D0, PS=0000001B
.
.
.
HP OpenVMS engineering are aware of this JAVA exception handling looping
problem and are currently investigating it.
▲contents
28
Chapter 4 Known Problems and Workarounds
This chapter describes known problems, restrictions, and workarounds for Oracle
JDBC for Rdb Release 7.3.4.x.x.
4.1 Thin Server Deadlocks
When using a thin server, the Rdb database environment and binds are within the
OpenVMS process context of the server process.
When multiple clients attach to database using the same server, each client is
allocated its own thread and has its own connection context within Rdb, but from the
Rdb engines viewpoint, all of these connections are held by a single process.
The locking behavior of Rdb for connections within a single process differs from that
of connections made using discrete OpenVMS processes. In particular when two
separate processes try to get the same lock, by default, the second process will wait
until the first releases the lock. In contrast when two connections within the same
process try to get the same lock, a deadlock may be raised.
Oracle recommends, when using thin servers, that the lockwait connection switch
or server option be used to prevent deadlocks. By choosing a lock wait duration
shorter that your system deadlock wait, and then choosing an appropriate maxtries
value which determines how many times the server will attempt to get the lock before
giving up, deadlocks may be prevented. In addition keeping your transaction duration
small, will reduce the time locks are held and thus allowing better concurrency.
See Lockwait and Maxtries in your Oracle JDBC for Rdb User Guide for more
information.
4.2 Using Java Fast VM on OpenVMS ALPHA
Using Java Fast VM on OpenVMS Alpha when starting thin servers may limit the
number of clients a single server may be able to handle concurrently. This is because
using Fast VM drastically reduces the amount of certain system memory that the
Oracle Rdb subsystem has access to.
The usual symptom of running out of memory due to this situation is when the server
process issues COSI-VASFULL errors.
29
Refer to the OpenVMS Java documentation on using Fast VM for suggestions on
how memory usage may be altered.
Heap size used by the Java VM is important in determining how much memory will
be pre-allocated by the Java VM. You can set the size of the heap using the -Xmx
option. By default, the Fast VM looks at your quota and the size of physical memory
on the system to decide how large a heap to give you. So if both are very large, you
may wind up with a larger heap than you really need. You can use -verbosegc on the
command line of the command used to start a server to see the current heap size.
Memory usage may also be altered by using the "-Xglobal" switch.
If the thin servers are getting COSI-VASFULL errors when Fast VM is enabled,
Oracle suggests trying the following switch settings as a first pass at rectifying the
problem.
$ java "-Xmx24m" "-Xglobal120m" -jar rdbthinsrv.jar
4.3 Using the Oracle SQL/Services Management GUI
and JDBC Dispatchers
The unsupported Oracle SQL/Services Management GUI does not recognize
dispatchers of the type JDBC. Unfortunately, this means that you will no longer be
able to use this GUI once a JDBC dispatcher has been defined.
Removing the JDBC dispatcher from your Oracle SQL/Services definitions will
alleviate this problem.
Note: The unsupported Oracle SQL/Services Management GUI has been replaced
with the newer JAVA-based Oracle Rdb Connectivity Management GUI (ORCM).
4.4 Blob Columns and Correlation Names
Due to the nature of the parsing carried out by the Oracle JDBC for Rdb drivers it is
required that all blob columns referenced from the second and subsequent tables in a
multi-table join must be qualified using correlation names as shown below:
Select ta.blob, tb.blob from table1 ta, table2 tb
where ta.name = tb.name
30
Failure to use a correlation name in conjunction with the blob column name may
result in SQL parsing errors when data is retrieved from the blob field as the drivers
do not have enough information to determine the correct table to access the blob data
from.
SQL-F-FLDNOTCRS, Column <blob col> was not found in the tables
in current scope
This limitation also means that the use of "*" in the select clause for a join across two
or more tables that include blob fields may also cause a similar SQL error.
4.5 Blob Columns and Update Statements
When the SQL statements compiled by the Oracle JDBC for Rdb drivers contain
reference to list of byte varying columns (Blobs) the drivers must create auxiliary
statements to carry out the required operations on the Blob columns within the
database.
These statement handle the preparation of list cursors required by Rdb to access the
underlying list of byte varying columns and use the dbkeys of the target rows to
establish the correct currency on the parent tables when using the list cursors.
To achieve this, code is added to any Select queries containing reference to Blob
columns in order to retrieve the dbkey of the parent table row. Code is also added to
Insert and Update statement to return the dbkey of the affected row.
If a Blob column is updated within an SQL Update statement, it is required that the
execution of the statement only updates a single row as only a single dbkey can be
returned to the drivers.
For example:
.
.
.
PreparedStatement prep = Conn.PrepareStatement(
"update resumes set resume = ? where employee_id = '91111'");
prep.setBinaryStream(1, bs, sss.length());
prep.execute();
.
.
.
If the resumes table contains more than one row satisfying the query selection criteria
then an exception will be raised by Rdb during the execute() :
31
%RDB-E-MULTIPLE_MATCH, record selection criteria should identify
only one record; more than one record found
4.6 External Procedures and Thin Server
Due to the way that Rdb carries out internal communication of handles between
different component during external procedure execution it is possible that concurrent
clients within the same Thin Server trying to use external procedures may see
exceptions related to the Rdb error BAD_DB_HANDLE.
Currently it is not possible to rectify this limitation within the Thin Server, as the
process model used internally by Rdb for using external procedures does not align
with how multi-threading has to be carried out within the Thin Server.
As the Multi-process Server (MP) uses a separate OpenVMS process for each
connection, it aligns better with the expected Rdb process model and consequently
external procedures may be used by concurrent clients.
Oracle suggests that if external procedures are expected to be executed by concurrent
clients, an MP Server should be used to handle these connections.
4.7 Limitations
4.7.1 Unsupported Methods
The following JDCB 2.0, JDBC 3.0 and JDK 1.4 methods are not currently
supported:
Blob.setBytes
Blob.setBinaryStream
Clob.setString
Clob.setAsciiStream
Clob.setCharacterStream
Clob.truncate
Connection.setSavepoint
32
Connection.rollback(savepoint)
Connection.releaseSavepoint
DatabaseMeteData.getSQLKeywords
PreparedStatement.setRef
PreparedStatement.setArray
PreparedStatement.setNull(int,int,String)
PreparedStatement.setURL(int,URL)
ResultSet.getRef
ResultSet.getArray
ResultSet.updateAsciiStream
ResultSet.updateBinaryStream
ResultSet.updateCharacterStream
ResultSet.updateRef
ResultSet.updateArray
ResultSet.rowUpdated
ResultSet.rowInserted
ResultSet.rowDeleted
ResultSet.updateBytes
Statement.cancel
Statement.setQueryTimeout
Statement.getMoreResults
Statement.executeUpdate(String sql, int autoGeneratedKeys)
Statement.executeUpdate(String sql, int[] columnIndexes)
Statement.executeUpdate(String sql, String[] columnNames)
Statement.execute(String sql, int autoGeneratedKeys)
Statement.execute(String sql, int[] columnIndexes)
33
Statement.execute(String sql, String[] columnNames)
The following features or datatypes in JDBC 2.0 and JDBC 3.0 are not supported:
● Array
● Ref
● Clob
● User Defined datatypes
● Scroll cursors
● Savepoints
4.7.2 Auto-generated keys
The total number of markers and fields allowed in a single SQL statement is 250.
4.7.3 String Truncation Warnings
The Oracle JDBC for Rdb drivers follow the SQL-92 rules for string truncation that
differ depending on whether it is a store or retrieval.
If a string truncation happens during a store operation, Oracle Rdb signals the error
RDB$_TRUN_STORE, unless all of the truncated characters are spaces, in which
case there is no error. If a string truncation happens during a retrieval, Oracle Rdb
signals the SQL warning RDMS$K_SQLCODE_TRUNCWARN.
4.7.4 Numeric and String Functions in JDBC
A number of JDBC standard Numeric and String functions are not supported within Oracle
Rdb unless you have previously prepared the database for use with OCI Services for Oracle
Rdb using the sql_functions.sql script. Refer to the Oracle SQL/Services documentation for
more details on using this script.
▲contents
34
Chapter 5 New Features and Corrections in
Previous Releases
5.1 New Features for Release 7.3.4.0.0
This section describes new and changed features in Oracle JDBC for Rdb 7.3.4.0.0.
5.1.1 Create / Drop Database Support
Release 7.3.4.0.0.
Starting with release 7.3.4.0.0 of Oracle JDBC for Rdb, the JDBC drivers and servers
support the ability to create and drop databases.
JDBC will accept the standard Oracle Rdb SQL syntax for create and drop
database, however, syntactical keywords must not be abbreviated.
In addition the statement may also contain the clauses “IF EXISTS” or “IF NOT
EXISTS” to conditionalize the operation.
By default, JDBC servers will not allow CREATE or DROP database statements, the
server configuration must be changed to enabled these operations.
See the Create and Drop Database section in your Oracle JDBC for Rdb User Guide
for more information.
▲contents
5.2 Corrections in Release 7.3.4.0.0
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.4.0.0
(Also see section Problems Corrected in release 7.3.4.1.x for details of any fixes that
may be included in patch releases 7.3.4.0.2 through 7.3.4.0.5).
35
5.2.1 Like Escape Throws OutOfBounds Exception
Fixed in Instance Build 20150424 Release 7.3.4.0.0.
Also fixed in release 7.3.3.2.2.
The use of the escape clause within a SQL statement containing the like operator
may cause the JDBC driver to throw an OutOfBounds exception.
The problem only occurs if the escape character chosen is the same default escape
character used by JAVA in string literals, the backslash character “\”, for example:
select 'not ok' from rdb$database where 'a%a' like '%\%%' escape '\'
A workaround is to use a character other than backslash for the escape character:
select 'ok' from rdb$database where 'a%a' like '%|%%' escape '|'
This has now been fixed.
5.2.2 Correlation Name Workaround for Blobs Fails
Fixed in Instance Build 20150424 Release 7.3.4.0.0.
Also fixed in release 7.3.3.2.3.
A problem introduced prior to Release 7.3.3.0.0 of Oracle JDBC for Rdb prevents
the workaround as described in the Known Problems and Workarounds section Blob
Columns and Correlation Names from working.
This has now been fixed.
5.2.3 PreparedStatement Cache Failure
Fixed in Instance Build 20150424 release 7.3.4.0.0.
Also fixed in release 7.3.3.2.4.
PreparedStatement handles can be cached by using the sqlcacheps connection
property (See Caching Statement Handles in the Oracle JDBC for Rdb User
Guide).
If statement handle caching has been enabled, a problem with return parameter
handling may cause a cached PreparedStatement to fail during execution with the
following exception:
oracle.rdb.jdbc.common.RdbException: Missing IN or OUT parameter at index: n
Where the index ‘n’ shown is a number 1 greater than the actual number of
parameter markers in the compiled statement.
36
This has now been fixed.
5.2.4 Blob problem with Delimited Identifiers
Fixed in Instance Build 20150424 release 7.3.4.0.0.
Also fixed in release 7.3.3.2.5.
A problem in the production of SQL statements during the processing of blobs
internally by JDBC may cause a SQL syntax exception to be raised.
When storing or updating blobs JDBC has to create SQL statements to handle the
Rdb segmented string operations. If the table name or column name associated with
the blob field requires to be handled as a delimited identifier, JDBC fails to
recognize this, and generates SQL text that is not syntactically correct.
▲contents
5.3 New Features for Release 7.3.3.2.x
This section describes new and changed features in Oracle JDBC for Rdb 7.3.3.2.x.
5.3.1 Change Transaction Start Time.
Build 20141215 release 7.3.3.2.2.
By default, when a new connection is made, JDBC will immediately start a
READ_ONLY transaction in anticipation of subsequent read-only operations.
The type of the default transaction may be changed to READ_WRITE using
connection string options.
The start of the default transaction may now be deferred by using the new connection
string transaction options, READONLYDEFER and READWRITEDEFER. See the
section Connection Options in the Oracle JDBC for Rdb User Guide for more
details.
▲contents
5.4 Corrections in Release 7.3.3.2.0
37
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.3.2.0.
(Also see Corrections in Release 7.3.4.0.0 section for details of any fixes that may be
included in patch releases 7.3.3.2.2 through 7.3.3.2.5).
5.4.1 NullPointerException when allowing Anonymous
Fixed in Instance Build 20140905 release 7.3.3.2.0. Also fixed in release 7.3.3.1.2.
When anonymous access to a JDBC server has been enabled, the server should allow
clients to use a blank username in order to access the Rdb database anonymously.
A problem introduced during the addition of user restriction features will cause the
server to throw a NullPointerException, if the server has anonymous access enabled and
the client provides a blank username.
This has now been fixed.
5.4.2 UnsupportedEncodingException: Binary
Fixed in Instance Build 20140916 release 7.3.3.2.0.
Also fixed in release 7.3.3.1.4.
During the processing of Blob data from the database the Rdb thin driver may throw
the following exception:
java.io.UnsupportedEncodingException: BINARY
at java.lang.StringCoding.encode(StringCoding.java:269)
or
java.io.UnsupportedEncodingException: BINARY : BINARY at
oracle.rdb.jdbc.common.Column.getObjectFromDb(Column.java:1818
This has now been fixed.
5.4.3 Alignment Faults when using MP Server
(BUG 20046411)
Fixed in Instance Build 20141119 release 7.3.3.2.0.
Also fixed in release 7.3.3.1.5.
38
A fix made in release 7.3.3.1.0 to solve a problem with MUTEX handling within the
MP Server has exposed a misaligned internal structure that may cause excessive
alignment faults on IA64 systems.
This problem only affects MP servers.
This has now been fixed.
5.4.4 ResultSet.absolute() Problems
(BUG 19780721)
Fixed in Instance Build 20141121 release 7.3.3.2.0. Also fixed in release 7.3.3.1.6.
Several problems have been found when using the ResultSet.absolute() method
when specifying negative row numbers or row numbers that are greater than the number
of rows returned by the ResultSet.
An error similar to the following may be seen:
SQL Exception Connection lost : n >= n
In addition the absolute() method may return “TRUE” when no row is available.
5.4.5 Orphaned Executor Processes when using Persona
(BUG 20119695)
Fixed in Instance Build 20141216 release 7.3.3.2.0.
A problem with lost executor checking within the MP server may cause the server to
prematurely attempt to terminate viable executors.
The problem is seen only when the MP server is started using the “-persona”
configuration option.
A problem in the termination protocol may also prevent the correct termination of the
executor process. As the executor process is not terminated fully, resources may be held,
which may cause resource problems if a number of these orphaned executor processes
exist concurrently on your system.
A workaround to prevent the premature executor termination is to disable the lost
executor checking by setting the MP Server configuration option
“-srv.lostexecutorsweep” to the value “0”.
Another possible work-round is to not use persona when using an MP server.
39
Standard thin servers using persona are not affected.
▲contents
5.5 New Features for Release 7.3.3.1.0
This section describes new and changed features in Oracle JDBC for Rdb 7.3.3.1.0.
5.5.1 Change in Template Configuration Filename
Release 7.3.3.1.0.
In prior releases the JDBC installation would place a copy of the template file
RDBJDBCCFG.XML in the RDB$JDBC_HOME directory and if not already
present, a copy will be placed in the RDB$JDBC_COM directory.
The copy in RDB$JDBC_HOME is meant to be a reference template copy only and
should not be used directly in production. In order to reduce possible confusion about
the use of this file, starting with JDBC release 7.3.3.1.0, the copy installed to
RDB$JDBC_HOME is renamed to RDBJDBCCFG_TEMPLATE.XML.
The RDBJDBCCFG_TEMPLATE.XML found in the RDB$JDBC_HOME directory
will be replaced each time you install Oracle JDBC for Rdb, however, any existing
RDBJDBCCFG.XML file found in the RDB$JDBC_COM directory will not be
replaced.
Note: By default, as the logical name RDB$JDBC_COM points to the
SYS$COMMON:[RDB$JDBC.COM] directory, it is this directory that the Oracle
SQL/Services JDBC dispatcher will use when searching for a configuration file to
use during server startup. ( See the sections JDBC Dispatcher and Determining the
server configuration file in the Oracle JDBC for Rdb User guide for more details).
▲contents
40
5.6 Corrections in Release 7.3.3.1.0
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.3.1.0.
(See section Corrections in Release 7.3.3.2.x for details of any fixes that may be
included in patch releases 7.3.3.1.2 through 7.3.3.1.6).
5.6.1 DatabaseMetadata.getColumns Problem with DefaultValue
(BUG 18900456 ) Fixed in Instance Build 20140717 release 7.3.3.1.0.
The DatabaseMetadata class method getColumns should return the default value
for each column found for the table selection specified.
A problem introduced in Oracle JDBC for Rdb Release 7.3.3.0 in the handling of
internal segmented string columns used to derive the underlying default value may
cause JDBC to either indicate that there is no default value for the column when one
actually exists, or may throw the following exception:
java.io.UnsupportedEncodingException: BLR : BLR
JDBC now correctly returns the default value found for either the table column or the
domain that the column is based on.
5.6.2 Show Server Configuration file Problem
Fixed in Instance Build 20140718 release 7.3.3.1.0.
When the Show Server command is used within the Oracle JDBC for Rdb
controller, details about the connected server are displayed. Included in the standard
display is the name of the configuration file the server used on startup.
In prior versions, JDBC used the standard Java File.getCanonicalPath() method to
retrieve the current configuration file specification. However on OpenVMS, if the
file specification contains a logical name and depending on whether the logical name
pointes to a rooted directory, the canonical form may contain extraneous path
elements within the same path string, for example:
SYS$COMMON:[rdb$jdbc.0703-3v0e5s]rdb$jdbc_com:rdbjdbccfg.xml
As shown in the above example, the path may display both the logical name and the
translation of that name.
41
Show Server has now been changed to no longer use the canonical form to display
the configuration file specification.
5.6.3 Unknown Action Message in Log file
Fixed in Instance Build 20140722 release 7.3.3.1.0.
Starting with Oracle JDBC from Rdb Release 7.3.3.0.0 it is possible that the
following message text may be displayed in the server log file:
JNI_Action 10 <unknown ACTION>: 10
This action code relates to a new feature (executor checking) introduced in 7.3.3.0.0
and the log message displayed is due to a missing description string within the debug
output code of the server.
This message does not represent a true error and may be safely disregarded.
5.6.4 Severe Performance Degradation in MP Server
(BUG 19150908 )
Fixed in Instance Build 20140722 release 7.3.3.1.0.
A change in the handling of mutex operations within the Multiprocess server made
during the 7.3.3.0.0 release may cause a severe reduction in the performance of the
server seen especially when the server is being utilized on a very busy system.
This has now been fixed.
5.6.5 Controller DCL Command line Failure
(BUG 18973965 )
Fixed in Instance Build 20140722 Release 7.3.3.1.0.
A problem introduced in release 7.3.3.0.0 may cause the DCL command line
parameter –node (or –n) to be incorrectly parsed by the Oracle JDBC for Rdb
controller. DCL command line statements similar to the following used to invoke the
controller will fail:
42
$ java -jar rdb$jdbc_home:rdbthincontrol.jar –
–n localhost -p 1701 -showclients
The statement fails showing the following exception:
Exception: java.lang.NumberFormatException: For input string: "localhost"
A possible workaround is to use the –url command line option instead:
$ java -jar rdb$jdbc_home:rdbthincontrol.jar –
–url //localhost:1701/ -showclients
5.6.6 Server Access Restrictions Ignored (BUG 19149514 )
Fixed in Instance Build 20140723 release 7.3.3.1.0.
A problem in how restriction checks are parsed from the server configuration file
may cause the JDBC server to ignore certain restrictions.
For example the following restriction may be ignored by the server if there are no
other allow or deny restrictions specified for the server; the server will incorrectly
allow all IPs instead of only local node users:
<server
name = "RestrictServer"
type = "RdbThinSrv"
url = "//localhost:1701/"
restrictAccess = "true">
<allowIP IP = "127.0.0.1"/>
</server>
This problem only occurs when the older access restriction syntax is used, in
particular:
AllowIP IP=”…”
AllowUser name=”…”
A workaround is to use the newer access restriction syntax:
Allow IP=”…”
Allow User=”…”
For example:
43
<server
name = "RestrictServer"
type = "RdbThinSrv"
url = "//localhost:1701/"
restrictAccess = "true">
<allow IP = "127.0.0.1"/>
</server>
5.6.7 Datetime Insertion Issues
(BUG 18921457)
Fixed in Instance Build 20140723 release 7.3.3.1.0.
Release 7.3.3.0.0 introduced the ability to maintain timestamp information at the
nanosecond level. This feature is only available if both the client and the server sides
of the JDBC connection are at Oracle JDBC for Rdb release 7.3.3.0.0 or higher. If
lower JDBC releases are used, timestamp handling will resort to the default
millisecond level.
Unfortunately the code required to ensure JDBC upward and downward release
compatibility introudced some problem in the handling of some datetime operations.
The PreparedStatement setObject() method may fail to insert the correct datetime
value into the Rdb database when the destination column is a datetime columns such
as Timestamp or VMS Date or Time and the source is a date/time object.
For example, the following may load the timestamp column with incorrect datetime
values:
Given the following table: date1 (f1 integer, ts timestamp(2))
String inTimestamp = "2014-07-21 09:22:10.1234567";
java.sql.Timestamp cvtTimestamp =
java.sql.Timestamp.valueOf(inTimestamp);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date cvtDate = dateFormat.parse("2014-07-21");
java.sql.Date cvtsdate =
java.sql.Date.valueOf("2014-07-21");
java.sql.Time cvtstime = java.sql.Time.valueOf("09:22:10");
long cvtlong = cvtTimestamp.getTime();
PreparedStatement ps3 = conn.prepareStatement(
"insert into tsbug1 (f1,ts) values (?,?)");
ps3.setObject(1, 1);
ps3.setObject(2, cvtTimestamp);
ps3.executeUpdate();
44
ps3.setObject(1, 2);
ps3.setObject(2, cvtDate);
ps3.executeUpdate();
ps3.setObject(1, 3);
ps3.setObject(2, cvtsdate);
ps3.executeUpdate();
ps3.setObject(1, 4);
ps3.setObject(2, cvtstime);
ps3.executeUpdate();
ps3.setObject(1, 5);
ps3.setObject(2, cvtlong);
ps3.executeUpdate();
Each record created will have an incorrect datetime value stored in the database.
Note: When the setObject() source is a datatype that will naturally cast to a long
value, the long value derived will be considered to be a milliseconds value
representing the number of milliseconds that have passed since January 1, 1970
00:00:00.000 GMT.
A workaround is to use the appropriate datatyped SET method instead of the generic
setObject() method, for example:
ps3.setTimestamp(1, cvtTimestamp)
5.6.8 MP Server may Become CPU Bound
Fixed in Instance Build 20140731 release 7.3.3.1.0.
A problem introduced in 7.3.3.0.0 may cause the MultiProcess server to go into a
tight CPU loop and consume excessive CPU even when no clients are attached.
This problem is a result of an unhandled array list exception that may manifest as the
following execition that will be shown in the server log file:
java.util.ConcurrentModificationException
This has now been fixed.
5.6.9 Controller Null Pointer Exception when no Default Server
45
Fixed in Instance Build 20140812 release 7.3.3.1.0.
When starting a server using the controller DCL command line option –
startserver, the name of the server provided is used to locate the server
characteristics within the configuration file used by the controller.
If the named server does not exist, the controller will then use the characteristics of
the server named “Default”. Due to a problem in the server configuration setup, if
the configuration file does not contain a Default server definition, a Null Pointer
exception is thrown.
The workaround for this is to either specify the name of a server that does exist
within the configuration file, or alternatively, ensure that the configuration file does
have a “Default” server specified, for example:
<?xml version = '1.0'?>
<!-- Configuration file for Rdb Thin JDBC Drivers and Servers -->
<config>
<!-- SERVERS -->
<servers>
<!-- DEFAULT server characteristics-->
<server
name="DEFAULT"
url="//localhost:1701/"
/>
<server
.
.
.
This problem has now been fixed. If the configuration file has no “Default” server
specified and the named server does not exist, the server will be started using the
default thin server port 1701.
5.6.10 Pool Server Tries to Restart Running Server
Fixed in Instance Build 20140812 release 7.3.3.1.0.
The pool server will attempt to restart any server in its pool that is marked for restart
and has been found to unresponsive. A problem in the viability check for servers
may lead the pool server to incorrectly mark a server as non-responsive even though
the server is running and responsive.
46
In releases prior to 7.3.3.0.0 the pool server will immediately remove servers from its
pool it thinks are unresponsive, thus preventing them from taking part in the pool.
The server will no longer be chosen as a candidate for new client connections.
In release 7.3.3.0.0 and above, the pool server will maintain the server in its pool but
will periodically check to see if it has become responsive again. As the server is still
in the pool it may still receive and process new connection requests from the pool
server, however after a predefined number of viability checks, if the pooled server is
still deemed unresponsive it will then be removed from the pool, and no further
connections will be redirected to it.
In addition, if the pool server finds an unresponsive server, and that server is marked
for restart, the pool server will attempt to restart this server, however if the server is
still running the restart attempt will fail and an error will be logged in the pool server
log.
A workaround for this problem is to change the pool server configuration file and set
all pooled servers autorestart to false, for example:
<server
name = "srv1"
type = "RdbThinSrv"
url = "//localhost:1911/"
autostart = "true"
autorestart = "false"
/>
The pool server has now been fixed to improve its pool viability checking.
5.6.11 Controller Poll Reopenlogs Hangs
Fixed in Instance Build 20140815 release 7.3.3.1.0.
If the controller command POLL REOPENLOGS is issued as the first POLL
command within the controller session, the controller will hang.
A workaround is to issue a standard POLL command first prior to issuing the POLL
REOPENLOGS:
rdbthincontrol> poll
Polling servers ...
... Polling complete : 1 responded. RdbThinSrv1701(0) //192.1.32.212:1701/ (0x2542DAD9<625138393>)
node = alfred
47
rdbthincontrol> poll reopenlogs
RdbThinSrv1701(0) //192.1.32.212:1701/ (0x2542DAD9<625138393>)
node = alfred : Logs Reopened
rdbthincontrol>
5.6.12 Pool Server Usage Balancing Problem
Fixed in Instance Build 20140815 release 7.3.3.1.0.
When the server balancing attribute for a Pool Server is set to “USAGE”, the pool
server should choose the server from its pool that has the most free user slots
available. The free user slots count is the number of potential connections the server
can still allow before the server MAXCLIENTS is reached.
In addition, any server that currently has no client connections should be
preferentially chosen.
A problem in the usage algorithm may cause the pool server to disregard servers that
have no current connections and select the least used server from the list of servers
that have at least one current connection.
This has now been fixed, as documented in the Oracle JDBC for Rdb User guide, if a
server does not currently have any client connections, it will be chosen in preference
to other busy servers.
5.6.13 Configuration File Problem Regression
Fixed in Instance Build 20140820 release 7.3.3.1.0.
A problem with the inheritance of server attributes from the “DEFAULT” server was
fixed in release 7.3.2.0.0. This problem has unfortunately resurfaced.
The problem and workaround is described in release note:
5.4.3 Some Server Characteristics not Correctly Inherited from DEFAULT
This has now been fixed.
5.6.14 Server Configuration Deny User not Enforced
Fixed in Instance Build 20140826 release 7.3.3.1.0.
48
The server attribute ‘deny user="xxxxx"’ in conjunction with the attribute
‘restrictAccess="true" ‘ may be used to deny specific users from accessing
a JDBC server:
<server
name = "srv1"
type = "RdbThinSrv"
url = "//localhost:1911/"
restrictAccess = "true"
>
<deny user = "murray"/>
</server>
However, a problem in the configuration attribute parsing may prevent the server
from correctly denying access to the specified users.
A workaround for this problem is to also include a valid IP restriction for the same
server definition. The wildcard IP address may be used:
<server
name = "srv1"
type = "RdbThinSrv"
url = "//localhost:1911/"
restrictAccess = "true"
>
<deny user = "murray"/>
<allow ip = "*.*.*.*"/>
</server>
▲contents
5.7 New Features for Release 7.3.3.0.x.
This section describes new and changed features in Oracle JDBC for Rdb 7.3.3.0.x.
5.7.1 Oracle Rdb PID now Displayed
Fixed in release 7.3.3.0.0.
Also available release 7.3.2.0.2.
49
The process/stream ID used internally by Oracle Rdb to uniquely identify client
connections and that is displayed in output from operations such as RMU/SHOW
USERS is now displayed by JDBC in server logs and in controller SHOW CLIENT
output.
The Rdb process/stream information is only available to JDBC if the client has
connected to a database within an Rdb environment of Version 7.2.5.0.0 or above,
and the JDBC server used is release 7.3.2.0.2 or above.
See the Show Clients section of the Oracle JDBC for Rdb User Guide for more
information.
5.7.2 Controller Command Show Executors
Fixed in release 7.3.3.0.0.
Also available release 7.3.2.0.2.
A new controller command show executors is now available to display
information about executors hosted by the currently connected multi-process server.
See the Showing Executors section of the Oracle JDBC for Rdb User Guide for more
information.
5.7.3 Extra Timestamp Precision
Fixed in release 7.3.3.0.2.
JDBC has now been enhanced to allow the use of extra precision in the fractions of
seconds associated with timestamps.
Prior to this release, when transferring data between Rdb datetime or timestamp
columns and Java timestamp variables, JDBC would limit the precision of second
fractions to 3 decimal places, i.e. milliseconds.
If the Rdb timestamp or datetime column was set by Rdb, for example when using
CURRENT_TIMESTAMP, the precision of the seconds value would be further
limited to the maximum precision supported by Rdb SQL , i.e. 2 decimal places (
hundreds of seconds).
It is possible to load higher precision time data into the timestamp columns
programmatically, however earlier version of JDBC would truncate the value to
milliseconds during datetime operations.
JDBC has now been changed and will now allow the use of timestamp data with upto
7 decimal places (i.e. OpenVMS ticks, or 100 nanosecond units).
50
The extra timestamp precision is only available to applications using JDBC 7.3.3.0
Patch 2 (or later) native or thin drivers, and only available to the thin driver if it is
connected to a JDBC server running release 7.3.3.0 Patch 2 (or later).
If required, the older precision of 3 decimal places for the fraction of seconds may
retained for individual database connections by using the “@TICKS” connection
string qualifier set to false.
For example:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers.rdb@ticks=false",
user, pass);
See the Connection Options section of the Oracle JDBC for Rdb User Guide for
more information.
5.7.4 Nlslang Connection Switch
Fixed in release 7.3.3.0.2.
When the values of text columns or literals are moved between Rdb and the JDBC
internal buffers, JDBC must convert the value to and from Unicode. To do this
JDBC need to know the expected character set encoding that the Rdb data is using.
JDBC will derive the encoding required using the character set information supplied
to it by Rdb.
Historically, especially prior to the current character set support found in Rdb, non-
MCS characters such as Kanji characters may have been stored in columns or literals
that have the DEC_MCS character set associated with them. If this is the case, when
JDBC converts these values to Unicode the original character may be lost as JDBC
will assume that the character was DEC_MCS.
To provide a way for customers that have non-MCS characters stored in DEC_MCS
literals or columns to correctly pass the original characters to JDBC applications,
JDBC now provides a connection string option nlslang.
This option may be used to tell JDBC the actually encoding used in columns or
literals that have the DEC_MCS character set attribute.
For example:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers.rdb@nlslang=DEC_KANJI",
51
user, pass);
See the Connection Options section of the Oracle JDBC for Rdb User Guide for
more information.
Note: This option does not alter the SQL National Language.
5.7.5 Use Query Header as Description
Fixed in release7.3.3.0.2.
The method DatabaseMetadata.getColumns() provides information about
table columns to the calling JDBC client. One of the standard properties returned by
the getColumns() method is Remarks which JDBC will fill from the column
description field found for that column returned by Oracle Rdb. By default, JDBC
uses the RDB$DESCRIPTION field of the RDB$RELATION_FIELDS system
table for the specified column.
JDBC will now allow you to specify that the Remarks property should be derived
from the Query Header field (the RDB$QUERY_HEADER column) of the
RDB$RELATION_FIELDS instead of the RDB$DESCRIPTION column.
The new connection string qualifier @useQueryHeader may be used to tell
JDBC to use the alternate source of the column’s Remarks field. If the value is set to
true, JDBC will fill the Remarks field from the RDB$QUERY_HEADER column
of the RDB$RELATIONS_FIELDS table. For example:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers.rdb@useQueryHeader=true",
user, pass);
Optionally, you may also specify a specific character set to use to encode the
contents of the query header column when returned to your application. For example:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers.rdb"+
"@useQueryHeader=Dec_Kanji", user, pass);
If you do not specify a character set to use but have specified an alternate character
set using the “@NLSLANG” connection string qualifier, JDBC will use that character
set to carry out appropriate encoding of the query header.
52
If no character set is specified in the “@useQueryHeader” connection string
qualifier or specified by the “@NLSLANG” connection string qualifier then LATIN1
will be used during encoding.
See the Connection Options section of the Oracle JDBC for Rdb User Guide for
more information.
▲contents
5.8 Corrections in Release 7.3.3.0.x
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.3.0.x.
5.8.1 Controller START SERVER Problems
Fixed in Instance Build 20131126 release 7.3.3.0.0.
The controller will fail with a Java NullPointer exception if the Start Server
command is used within a controller session that does not have a configuration file
specified:
$ java -jar RDB$JDBC_HOME:RDBTHINCONTROL.JAR
rdbthincontrol> start server 1701
NullPointerException:
java.lang.NullPointerException
A work around for this problem is to start the controller application using a
configuration file that contains at least one server definition.
An additional problem may be seen if the Start Server command issued
without any other options. This command will fail with the parsing error:
$ java -jar RDB$JDBC_HOME:RDBTHINCONTROL.JAR
rdbthincontrol> start server
Starting server ...
SQLException: Error parsing URL : //localhost:0/:S1000
These problems have now been fixed.
53
5.8.2 Executor Initialization Problem
Fixed in Instance Build 20131126 release 7.3.3.0.0.
Also fixed in Instance Build 20130517 release 7.3.2.0.3.
Depending on the system load it is possible that a newly created executor process
may not have fully completed its initial response to the Multi-process server before
the server checks the executor response data.
The incomplete response information may cause a problem with the initialization of
the connection that is waiting on the executor process creation.
The server log may show an RdbException logged for the thread where a zero value
for the executor version and/or instance may be seen similar to :
oracle.rdb.jdbc.common.RdbException: Executor images version
mismatch, server shr = 73202:20130501 , executor = 0:20130501
or :
oracle.rdb.jdbc.common.RdbException: Executor images version
mismatch, server shr = 73202:20130501 , executor = 0:0
It is possible, depending on the loading of the server system, that this problem may
in turn cause various access violations to be raised during the connection request,
which in turn will cause connection requests to be terminated in error.
5.8.3 Idle Client Termination breaks Subsequent Connection
Fixed in Instance Build 20131126 release 7.3.3.0.0.
Also fixed in Instance Build 20130520 release 7.3.2.0.4.
A problem in the handling of idle client termination may cause subsequent
connection requests to fail.
During the termination of an idle client, the Multi-process server will force a
disconnection of the connection and terminate the executor process used by that
connection. This executor is no longer available for re-use, however a problem in
the executor cleanup code caused the server to incorrectly mark the executor as valid
for re-use. A subsequent connection request may get this unusable executor which
will cause the request to fail with an exception similar to following being raised in
the client application:
oracle.rdb.jdbc.common.RdbException: Connection lost :
java.io.EOFException
54
@rdb.Client.CONNECT_SECURE_V73
It is also possible that this same problem may eventually cause the Multi-process
server to hang requiring a forced termination of the server.
This problem only occurs when using Multi-process servers that have a non-zero
client idle timeout value set for the “cli.idleTimeout” server configuration option.
5.8.4 Controller STOPSERVER command Problem
Fixed in Instance Build 20131126 release 7.3.3.0.0.
Also fixed in Instance Build 20130530 release 7.3.2.0.5.
A problem introduced in the first non-patched 7.3.2.0 release of JDBC may cause the
controller command line command STOPSERVER to raise an exception.
For example:
java -jar rdb$jdbc_home:rdbthincontrol.jar -stopserver 1818
raises the following exception:
SQLException: Error parsing URL : //localhost:0/:S1000
This has now been fixed.
5.8.5 Hang on Connection to Server when using SSL
Fixed in Instance Build 20131126 release 7.3.3.0.0.
Also fixed in Instance Build 20130612 release 7.3.2.0.6.
A code change made for the 7.3 release of JDBC may cause a client connection
request to wait indefinitely for a new connection when SSL is used.
If the client requests a normal , non-SSL connection to an SSL enabled JDBC server
or attempts to connect using SSL to a non-SSL JDBC server, the client connection
will wait indefinitely.
55
Prior to release 7.3 JDBC, the server would determine that there is a mismatch in the
SSL handshake after about 1 second , and force the connection request to terminate
immediately. A code change made during the 7.3 release accidentally disabled this
handling.
A workaround is to set the servers cli.idletimeout configuration attribute to a
positive value. If the SSL handshake does not complete within that time, the server
will abort the connection request. However, this also means that bound clients will
be forcibly disconnected if they are idle for longer than the cli.idletimeout
period.
This has now been fixed.
5.8.6 DatabaseMetadata Pattern Matches and Nulls
Fixed in Instance Build 20131126 release 7.3.3.0.0.
Also fixed in Instance Build 20131118 release 7.3.2.0.6.
In prior versions, Oracle JDBC for Rdb drivers did not correctly handle null values
for pattern parameters used in various DatabaseMetadata methods.
The JDBC standard states: "If a search pattern argument is set to null, that
argument's criterion will be dropped from the search".
The DatabaseMetadata methods that were not correctly handling nulls include:
GetProcedures()
GetProcedureColumns()
GetDomains()
GetFunctions()
These methods now handle null patterns correctly.
5.8.7 DatabaseMetadata Missing Index Information
Fixed in Instance Build 20131126 release 7.3.3.0.0.
Also fixed in Instance Build 20131118 release 7.3.2.0.6.
In prior versions of Orace JDBC for Rdb, the DatabaseMetadata.GetIndexInfo()
method may fail to return information about existing indexes.
56
This method is used by tools such as the Rdb Addin for SQL Developer, to return a
list of indexes associated with each table found within the database schema.
Due to this problem, tools such as SQLDeveloper may fail to display existing
indexes.
This has now been fixed.
5.8.8 Forced Client Termination may Crash Thin Server
Fixed in Instance Build 20131126 release 7.3.3.0.0.
It is possible that the forced termination of client applications by stopping or
destroying the client application process may cause an access violation to occur
within the JDBC server that the client was connected to.
Forcible termination of application using the thin driver may prevent the proper
rundown of the client side of the JDBC connection. The server will determine that
the client connection has been lost and will try to close down the connection in a
controlled manner, however it is possible that this cleanup processing may get
interupted by other server activities and may result in an access violation within the
server’s shared image.
The JDBC servers have now been changed to carry out more aggressive locking of
connection closedown operations which will prevent other server threads from
interfering with memory cleanup.
Oracle recommends to not forcibly close down client applications by process
termination using STOP/ID etc. Clients using the thin driver should either be
allowed to close-down normally or you may use the JDBC controller to stop the
client’s connection within the server, which will carry out a more regulated cleanup
of the connection.
5.8.9 Show Clients may cause NullPointerException in Server
Fixed in Instance Build 20140304 release 7.3.3.0.0.
Using the controller command SHOW CLIENTS may cause an exception to be
raised in the server the command was issued to:
java.lang.NullPointerException
oracle.rdb.jdbc.srv.ActionHandler.doControlPacket
oracle.rdb.jdbc.srv.SrvActionHandler.doControlPacket
57
This problem occurs infrequently and only happens when a client happens to
disconnect from the server within a small time window during the building of the
show client results by the server.
This problem does not affect the execution or viability of the active server, but will
cause the show client request to fail within the controller.
Note: As the ORCM application uses a variant of the thincontrol show clients
command it is also liable to show this same problem.
This has now been fixed.
5.8.10 AccessViolation in MP Server
Fixed in Instance Build 20140313 release 7.3.3.0.0.
A problem in thread synchronization during some server control operations may
cause the MP Server to throw an Access Violation exception and terminate.
Under relatively rare circumstances the MP Server may fail due to an
AccessViolation while it is trying to deliver client or executor information to the
thincontroller or ORCM.
The following exception may be seen in the server log prior to the server
terminating:
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=00000000xxxxxxx, PC=000000000xxxxx, PS=0000xxxx
RDBJDBCMPSHR73 CJDBCCTX_M getDaMemUsage
RDBJDBCMPSHR73 CJDBCCTX_M getStmtMemUsage
This problem may be seen more often in MP Servers that create and destroy executor
processes frequently, and may happen immediately following the execution of
SHOW CLIENTS or SHOW EXECUTORS in a thincontroller session.
As ORCM also issues similar commands to obtain information about current server
use, it may also instigate this server problem.
The possibility of the server failure may be reduced by providing adequate free
executor processes for MP server clients to use, thus reducing the need for the server
to create or destroy executor processes.
58
5.8.11 Syntax Errors in Insert and Update Statements
Fixed in Instance Build 20140314 release 7.3.3.0.0.
A problem in the dbkey retrieval code generated by the JDBC drivers in order to
return the dbkey of newly updated or inserted record results in a syntax error.
The Rdb JDBC drivers add additional code to INSERT and UPDATE statements
during SQL statement preperation to return the dbkey of the resultant record. To
determine the position of the additional sql syntax, the JDBC drivers do a search for
any existing “INTO” clause. Unfortunately the drivers may mistake literals or
delimited identifiers may contain the whitespace-seperated word “INTO” for the
searched keyword resulting in incorrect SQL syntax being generated.
For example, the following SQL text may fail:
insert into tab9(fld1,fl2) values ('55555',' TEST INTO ')
The SYNTAX_ERR exception raised shows the modified SQL statement text,
%SQL-F-SYNTAX_ERR, Syntax error : in "insert into tab9(fld1,fld2) values
('55555',' TEST , DBKEY INTO '), ?"
A work around is to add the undocumented prefix “{nodbk}” at the start of the sql
text , which will disable the creation of the extra dbkey retrieval code:
{nodbk}insert into tab9(fld1,fl2) values ('55555',' TEST INTO ')
This has now been fixed.
5.8.12 Statement.getGeneratedKeys() throws RdbException
Fixed in Instance Build 20140314 release 7.3.3.0.0.
Calling the Statement.getGeneratedKeys() method on an executed
statement that does not auto-generate keys should return an empty ResultSet.
The Rdb JDBC drivers do return an empty ResultSet, but incorrectly mark the
ResultSet as closed. Accessing this ResultSet may raise the following exception:
oracle.rdb.jdbc.common.RdbException: Closed Resultset
59
The Rdb JDBC drivers now mark the ResultSet as open.
5.8.13 SQLException thrown in ResultSet.isBeforeFirst()
Fixed in Instance Build 20140520 release 7.3.3.0.3.
When using the method ResultSet.isBeforeFirst() on a ResultSet produced by some
DatabaseMetaData methods and the Statement.getGeneratedKeys method, the
following exceptions may be raised:
java.sql.SQLException, Missing Curs in rdbFetchRow
or java.lang.NullPointerException
This has now been fixed.
5.8.14 PreparedStatement executeBatch() Problems
Fixed in Instance Build 20140526 release 7.3.3.0.3.
A problem in the handling of batch entries for PreparedStatement may produce
incorrect results after batch execution.
Certain batch entries may be executed twice when
PreparedStatement.executeBatch() method is called. If the batch entry contains an
update or delete SQL statement, the entry may be executed twice in immediate
succession.
This may cause problems as the second instance of the execution may change the
intended behaviour of the original statement. For example the following SQL text :
update tab1 set F1 = F1 +1
will result in the F1 column being updated twice and end up as F1 +2.
In addition the updated count for that batch entry may be returned incorrectly, for
example the following SQL text:
delete from t1b where F1 = ?
60
will result in a value of 0 being returned in its update count value, as the first
execution of the statement will remove the records and the subsequent execution will
then return the value 0 as no records will be affected by its execution.
This problem only affects PreparedStatements that have update or delete SQL
statements batched. Normal Statements using executeBatch() are not affected.
Another problem may be see when executing an update SQL statement using the
PreparedStatement executeBatch. If the statement is not a singleton operation, that
is, if it updates more than one record, the batched statement may fail with the
following error:
java.sql.BatchUpdateException: Problem with one or more batched query
And show the following underlying Rdb error:
%RDB-E-MULTIPLE_MATCH, record selection criteria should identify only one
record; more than one record found
These problem have now been fixed.
▲contents
5.9 New Features for Release 7.3.2.0.x
This section describes new and changed features in Oracle JDBC for Rdb 7.3.2.0.x.
5.9.1 Server Options List Inheritance Release 7.3.2.0.0.
When a XML-Formatted configuration file is used, many server characteristics may
be inherited from either the DEFAULT or the DEFAULTSSL server definitions.
If a characteristic is specified within a specific server definition, that specification
will take precedence. If the characteristic is not specified in the specific server
definition then if it exists in the default server definition it will be inherited.
In previous versions of Oracle JDBC for Rdb, some characteristics were not
inherited and even if specified within the default server definition they would not be
passed on to other servers in the same configuration file.
61
The characteristic that did not get inherited were all list options that included:
Server Configuration List Options
Option
<allowDatabase name=”database-name”>
<allowPrivUser name=”user-name”>
<allowUser name=”user-name”>
<deny sql =”sql-pattern”>
<enableEvent name=”event-name”>
List options provide a mechanism to specify one or more named options that may be
used by the server for validity, event checking and other operations. Each server
definition may contain multiple values for the same named option, for example,
multiple allowUser entries can be used to provide a list of users that will be
allowed to access that server.
Starting with release 7.3.2.0, the list options specified above may now be inherited
from the default server.
The inheritance of these options is cumulative, in that the resultant list of options is
the combination of those present in both the default and the specific server
definitions.
If a server definition already has an option with the same type and name, it will not be
replaced.
Note
An error in prior documentation specified that the enableEvent
configuration option would be inherited; this is not true for versions of
Oracle JDBC for Rdb prior to release 7.3.2.0.
5.9.2 Oracle JDBC for Rdb Manager Server
Release 7.3.2.0.0.
The Oracle JDBC for Rdb manager server is a server-side component that services
JDBC management requests.
The main purpose of the manager server is to provide a mechanism that will allow
JDBC servers to be started up on nodes remote to the one the controlling application,
such as the Oracle JDBC for Rdb controller, is running.
62
Please see the Oracle JDBC for Rdb Manager Server section of the Oracle JDBC for
Rdb User Guide for more information on manager servers.
5.9.3 Restricting Server Access by IP
Release 7.3.2.0.0.
JDBC servers may now check incoming connection IPs to determine if the client
connection will be accepted.
New server configuration options:
● <allow ip = “<valid ip mask>” />
● <deny ip = “<valid ip mask>” />
Using the new server configuration options you may restrict access to the server by
having the server check the originating IP of the client connection to either accept or
reject that IP. The valid IP mask may be either a simple IP specification or may be
JAVA regular expression.
See the Restricting Server, Database and Operational Access section of the Oracle
JDBC for Rdb User Guide for more details.
5.9.4 Executor Balancing
Release 7.3.2.0.0.
By default, the multi-process server uses a first-in/first-out (FIFO) scan of its free
executor list to select the next executor process to allocate to the new connection
request.
Oracle JDBC for Rdb now allows you to choose from several new executor
balancing protocols.
Please see the Executor Balancing section of the Oracle JDBC for Rdb User Guide
for more information.
5.9.5 MinFreeExecutors
Release 7.3.2.0.0.
Multi-process servers may now be configured to maintain a minimum set of free
executor processes when the server is cleaning up executor processes that have
exceeded their maximum idle time.
63
Please see the Multi-process Server Configuration Options and the Executor
Maintenance sections of the Oracle JDBC for Rdb User Guide for more information.
5.9.6 Executor Reuse
Release 7.3.2.0.0.
Multi-process servers may now be configured to change the way they reuse executor
processes.
Please see the Multi-process Server Configuration Options and the Executor Reuse
sections of the Oracle JDBC for Rdb User Guide for more information.
5.9.7 LogFile Patterns
Release 7.3.2.0.0.
The server logfile configuration option provides an absolute or relative file
specification to use as a log file. This specification may also be a special pattern, in
which case certain key character sequences may be used in conjunction with normal
ASCII filename characters to specify the automatic creation of the log file name.
See the Logfile Pattern section of the Oracle JDBC for Rdb User Guide for more
information.
5.9.8 New Server Configuration Option retainRdbSQLState
Release 7.3.2.0.0.
In keeping with third party application requirements, during the processing of
INSERT statements, the SQL State returned when using the
SQLException.getSQLState() method is set to the value “S1000” indicating
an error has occurred. The message text of the exception contains the details of the
error raised.
Oracle Rdb delivers more specific SQL State values including Rdb specific
(“Rxxxx”) state values, but these may be suppressed by JDBC.
The server retainRdbSQLState configuration option may be used to change this
behaviour. When set to “true”, JDBC will return the original SQL State raised by the
underlying database.
For example:
64
<server
name = "DEFAULT"
type = "RdbThinSrv"
url = "//localhost:1701/"
retainRdbSQLState = "true" />
See the Server Configuration Options section of the Oracle JDBC for Rdb User
Guide for more information.
5.9.9 New Connection Option app
Release 7.3.2.0.0.
To help identify applications usage of JDBC servers, a new connection option, app,
has been introduced.
For example:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers@app=MyOwnApplication",
user, pass);
See the Connection Options section of the Oracle JDBC for Rdb User Guide for
more information.
▲contents
5.10 Corrections in Release 7.3.2.0.x
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.2.0.x.
5.10.1 Event Flag Problem with long Executor name Prefixes
Fixed in Instance Build 20120821 release 7.3.2.0.0.
During the creation of an executor process by the Multi-process server, the server
attempts to provide a unique process name for the executor so that it may be easier to
recognize when using system tools such as SHOW SYSTEM.
65
By default, the server will create the process name by utilizing the server name and
the unique connection id.
To allow better control of process naming, the prefix of the executor process name
may also be explicitly specified by using the server configuration option
srv.execPrefix. The server will use this prefix and append a sequence number
to it in an attempt to provide an unique name.
As there is a limit of 15 characters allowed for OpenVMS process names it is
possible that longer prefixes may cause the unique portion of the name to cycle
around faster and increase the probability that a process name may be chosen that
matches an existing running executor process.
If the process name matches an existing process, the startup of the new executor will
fail and the executor process will not be present to acknowledge startup completion
to the server.
Normally an executor process failure will be correctly caught by the server and the
appropriate exceptions raise, however if the failure happens after the process is
correctly created but before this initial acknowledgement, the server will not see the
failure for several minutes.
Eventually, an exception similar to the following will be raised:
oracle.rdb.jdbc.common.RdbException: Executor not responding on
EFN 66 EFNMASK 4 after 302 seconds
This message will be written to the server log. In addition other messages describing
the reason for the failure may be found in the log files associated with the executor in
the JDBC log area which by default is pointed to by the logical name
RDB$JDBC_LOGS.
Multi-process servers have now been changed to try to better handle process name
clashes by doing further name checking on the running system prior to attempting to
start the new process.
5.10.2 Executor Process Termination Problem
Fixed in Instance Build 20120821 release 7.3.2.0.0.
During the normal shutdown of an executor, the Multi-process server will request the
executor process to self-terminate to ensure that all resources are correctly released
prior to the OpenVMS process terminating.
After this self-termination is requested, the server will then check to see if the
process is still there, and if it is, will forcibly stop the process.
66
In heavily utilized systems it is possible that the executor process self-termination
has not completed by the time the server does its secondary check and subsequent
process termination. In this situation the process may get into a “limbo” state where
it fails to closedown correctly and depending on when the second termination is
issued the executor process may get trapped in an endless exception handler loop.
The result of this problem is that the executor process may start to consume large
amounts of CPU, or may remain idle on the system without releasing resources. In
addition this process may cause other problems if the server is restarted and tries to
use the same process name for a newly created executor.
This has now been fixed, the server will now allow a greater amount of time for the
self-termination to occur before forcing an image exit.
5.10.3 Some Server Characteristics not Correctly Inherited from DEFAULT
BUG 14510287.
Fixed in Instance Build 20120821 release 7.3.2.0.0.
Some server characteristics are not correctly copied from the DEFAULT or
DEFAULTSSL server definitions when named servers are used.
For example if mycfg.xml contains the following:
.
.
.
<server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1701/"
maxClients="-1"
restrictAccess = "true"
>
<allowUser name = "JDBC_USER"/>
</server>
<server name="srv1" />
.
.
.
Starting the server using this configuration and using the –verify switch to verify the
server characteristics:
67
java –jar rdb$jdbc_home:rdbthinsrv.jar –cfg mycfg.xml –name "srv1" -verify
will raise the following exception:
java.lang.NullPointerException
at oracle.rdb.jdbc.srv.RdbSrv.logServerDetails
Although the restrictAccess option is correctly inherited , the allowUser
option from the DEFAULT server is not, causing this problem.
Other server characteristics may also fail to be inherited, although several may not
cause immediately obvious problems.
The following is a list of server configuration options that are not correctly inherited
from either of the default server definitions:
Server Configuration Option
Option
<allowDatabase name=”database-name”>
<allowPrivUser name=”user-name”>
<allowUser name=”user-name”>
<deny sql =”sql-pattern”>
<enableEvent name=”event-name”>
A workaround is to place these options explicitly in each server definition that
requires them.
This has now been fixed.
5.10.4 Memory Problem with Pool Servers and Java 1.6.0-2
Fixed in Instance Build 20120822 release 7.3.2.0.0.
A problem in Java 1.6.0-2 in the recovery of memory when byte streams are garbage
collected may prevent the associated memory from being recovered correctly which
may lead to a memory leak in the Java VM. This problem does not occur if the byte
streams are explicitly closed prior to garbage collection.
JDBC servers try to ensure that all byte streams used are correctly closed prior to
releasing the socket connection to the client, however, a problem within Pool Servers
may cause the explicit closure of a byte stream to be bypassed.
68
The failure of the byte stream to be garbage collected correctly may eventually result
in Java VM problems and may cause an exception similar to the following which
will terminate the Pool Server:
%SYSTEM-F-ASTFLT, AST fault, SP=0082D250, param=7FFEFFC8,
.
.
.
The Pool Server has now been modified to ensure that all byte streams are correctly
closed prior to socket closure.
OpenVMS Java engineering is aware of this problem.
5.10.5 Exception not Thrown when Record Locked during Update
Fixed in Instance Build 20130301 release 7.3.2.0.0.
Normally, if JDBC finds a record locked during an insert, update or delete Statement
operation, a Record Locked exception will be raised.
However, a problem in the handling of record locks by the Native driver prevents the
driver from raising a locked record exception correctly.
Instead, if a locked record is found, the update operation will be aborted and the
statement’s update count, obtained using the
Statement.getUpdateCount(), method will be set to -4.
Although an exception is not raised, you may still determine if a record lock has
occurred by calling the Statement.getUpdateCount() after calling the
statement execute. If the value returned is -4, a locked record was found. If no
locked records were found, the value returned will be the number of records affected
by the update.
This problem affects the Native driver only. The Thin driver is not affected.
This problem has been fixed.
5.10.6 Classpath Documentation Error
Fixed in Instance Build 20130426 release 7.3.2.0.0.
69
In prior versions of Oracle JDBC for Rdb, due to a typographic error, the Driver
Class section of the User Guide referenced the classpath for the JDBC drivers
as:
Driver Class Classpath
oracle.jdbc.rdb.rdbThin.Driver or
oracle.jdbc.rdb.rdbNative.Driver
The was incorrect, and should read:
Driver Class
Classpath oracle.rdb.jdbc.rdbThin.Driver
or oracle.rdb.jdbc.rdbNative.Driver
The subsequent code example in the same section shows the classpath correctly.
A similar error may be found in the following User Guide sections:
Results Class
Blob Class
This has now been fixed.
▲contents
5.11 New Features for Release 7.3.1.0.x
This section describes new and changed features in Oracle JDBC for Rdb 7.3.1.0.x.
5.11.1 “Owner” may be used in XML Configuration Files Release 7.3.1.0.0.
70
The keyword OWNER may be used in certain sections that require a username in the
XML Server configuration file.
The keyword OWNER specifies the OpenVMS account username of the account
used to start the server, and may be used instead of a username in sections such as
AllowUser or AllowPrivUser. For example:
.
.
. <server
name = "rdbthnsrv8"
type = "RdbThinSrv"
url = "//localhost:1708/"
restrictAccess = "true"
srv.showPoll = "true"
allowAccessToCL = "true"
>
<allowUser name = "jdbc_user"/>
<allowUser name = "owner"/>
<allowPrivUser name = "owner"/>
</server>
.
.
.
5.11.2 SQL Statement Restriction and Denial
Release 7.3.1.0.0.
Servers may be configured to restrict or deny certain SQL statements.
See section Restricting SQL Statements in the Oracle JDBC for Rdb User Guide for
more details.
5.11.3 Event Notification Release 7.3.1.0.0.
Servers may be configured to notify enlisted event listeners of events as they occur
on the server. Events such as connect and disconnect and memory usage may be
monitored.
See section Event Logging and Notification in the Oracle JDBC for Rdb User Guide
for more details.
5.12 Corrections in Release 7.3.1.0.x
71
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.1.0.x.
5.12.1 Multi-process Server Connection Hang when Executor Dies Fixed in Instance Build 20111110 release 7.3.1.0.0.
If an executor process dies or is forcibly terminated it is possible that the associated
connection within the Multi-process (MP) server may hang indefinitely waiting on a
response from the non-existant executor.
Executor process termination is notified to the server through several different
internal mechanisms, however inherent in Pthread mutex operations is the possibility
that locking operations may prevent the associated thread from acting on the
termination notification. If this termination notification is missed or blocked, the
thread may wait indefinitely.
The MP server has been changed to include an executor process sweeper thread that
will check each active connection utilizing an MP executor to determine if it is still
viable.
If the sweeper find that an executor has been flagged as terminated but the connection
is still active and has not been rundown, the thread for the active connection will be
forcibly terminated causing a socket exception on the client side.
The new server parameter srv.lostExecSweep may be used to specify the
frequency of the sweeper thread execution.
See your Oracle JDBC for Rdb User Guide for more information on the server
parameter srv.lostExecSweep.
5.12.2 Multi-process Executor Process Terminates Unexpectedly
Fixed in Instance Build 20111111 release 7.3.1.0.0.
A problem in the server viability checking carried out by the executor process may
cause the executor process to self-terminate unexpectedly.
If an executor is associated with an active connection and has remained idle for a
predefined amount of time as detailed below, it may incorrectly determine that the
parent server is no longer running and self-terminate.
The amount of time the executor will remain in an idle state before termination
depends on the MP server attribute srv.MPMaxTries.
If the executor is is idle for more than srv.MPMaxTries * 3 seconds, it may
self-terminate, thus if the MP server is using the default srv.MPMaxTries of 500
72
then the executor will self-terminate after 25 minutes of idle time if it still holds an
active connection.
This problem only effect executors associated with active connections and not
executors within the MP server free executor pool.
A work-around is to set the srv.MPMaxTries to a very large number to delay
this termination.
This problem was introduced in release 7.3.0.0 and is now fixed.
5.12.3 Pooled Server AutoRestart Problem
Fixed in Instance Build 20111117 release 7.3.1.0.0.
A problem introduced in release 7.3.0.2.0 (V7.3-02) may cause the Pool server to
incorrectly flag its children pooled servers as unavailable and prevent new
connections from being made to these servers.
If a pooled server has “Autorestart” enabled, the Pool server will periodically check
to see if the server is viable and if it determines that the server is no longer
responding, the Pool server will mark the pooled server as unavailable and then
attempt to restart it.
A problem in how the Pool server determines the viability of the child server causes
the Pool server to incorrectly mark the child as unavailable. The attempted restart
will fail as the original pooled server is still present and connected to the socket that
the new instance is trying to allocate. Thus the pooled server will then remain
marked as unavailable and will no longer participate in the pool.
This problem will prevent all pooled servers marked as “Autorestart” from
participating in the server pool.
A work-around is to set Autorestart=”FALSE” for each of the pooled servers
in the server XML configuration file. This will prevent the Pool server from
checking and incorrectly marking as invalid.
5.12.4 getGeneratedKeys() and OutOfBounds Exception
Fixed in Instance Build 20111219 release 7.3.1.0.0.
The call to ResultSet.getNext() on a resultset returned by the
Statement.getGeneratedKeys() may throw the following exception:
java.lang.ArrayIndexOutOfBoundsException: -1
73
This exception only occurs when the getNext() method is called on the resultset
after a prior getNext() returned false indicating an end of recordstream.
The following code example will show this problem:
.
.
.
ps2.execute();
rs = ps2.getGeneratedKeys();
if (rs == null)
log ( "No resultset from execute");
else
{
while (rs.next())
{
.
.
.
}
rs.next(); // this will throw an array exception
}
.
.
.
This has now been fixed.
5.12.5 Multi-process Server fails when Persona Used
Fixed in Instance Build 20111221 release 7.3.1.0.0.
A problem introduced in 7.3.0.2.0 (V7.3-02) may cause the Multi-process server to
terminate while attempting to start an executor process.
This problem only occurs if the server has the Persona attribute set.
If the Persona attribute is designated for the server, executor processes will be
created using the correct Persona however a problem in determining the process
identifier of the executor process may cause a Access Violation within the server
process which will terminate the Server image.
The following is an example of the type of exception raised:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
74
# %SYSTEM-F-ACCVIO (0xc) at pc=35C5481, pid=564797798, tid=2070302400
#
# Java VM: Java HotSpot(TM) Server VM (1.5.0.20 08/30/2010-13:43 IA64 mixed
mode)
# Problematic frame:
# C [RDBJDBCMPSHR73+0xffffffb2]
#
# An error report file with more information is saved as
hs_err_pid564797798.log
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=0000000000000000, PC=000000000113DC30, PS=0000001B
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
JAVA$HOTSPOT_SHR OS print_hex_dump 133224 0000000000001EF0
000000000113DC30
.
.
.
----- Above condition handler called with exception 0000000C
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
address=0000000000000010, PC=00000000035C5481, PS=0000001B
----- End of Exception message
0 FFFFFFFF80393F42
FFFFFFFF80393F42
RDBJDBCMPSHR73 RJDBC_PROC rjdbc_proc_GetPid
42606 00000000000029A1
00000000035C5481
RDBJDBCMPSHR73 RDBJDBC Java_rdb_JNI_StartProcess
The only work-around is to not use Persona for Multi-process servers.
This has now been fixed.
5.12.6 RestrictAccess being Applied even when Disabled
Fixed in Instance Build 20120201 release 7.3.1.0.0.
The JDBC user quide specifies that if the server attribute restrictAccess is not
defined or is set to false then database and user restrictions will not be carried out.
A problem in how server restriction policy was applied may cause restrictions to be
applied even if the server attribute restrictAccess is not defined or is set to false.
If there is at least one allowDatabase element in the server specification then
database restrictions were applied to the server. Similarly, the presence of
allowUser entries would cause the appropriate restrictions to be applied
irrespective of the restrictAccess settings.
This has now been fixed.
75
5.12.7 Multi-process Problem in the Native Driver
Fixed in Instance Build 20120208 release 7.3.1.0.0.
Due to changes in thread interleaving introduced in Java JDK6.0 it is possible that
applications using the multi-process option of the rdbNative driver connections
may no longer work correctly when run in a JDK6.0 environment
Interference may occur between simultaneously running threads accessing JDBC
connections within the same application object instance which may cause Access
Violations within the application.
The nature of the problem depend very much on where the interference occurs and
what each thread was trying to do at the time, however more generally the problems
may be seen during connection startup.
Various Access Violations, problems with OpenVMS Event Flags and Pthread
mutex problems have been noted during connection, with the subsequent prevention
of JDBC connections being made correctly or resulting in the hanging or the
termination of the running application.
The JDBC rdbNative driver has now been changed to carry out more aggressive
thread locking at the initial handshake phase of the JDBC connection with the Multi-
process executor, to prevent these inter-thread problems.
This problem affects the rdbNative driver only, applications using the rdbThin driver
connecting to Multi-process servers are not affected.
▲contents
5.13 New Features for Release 7.3.0.2.x
This section describes new and changed features in Oracle JDBC for Rdb 7.3.0.2.x.
5.13.1 Server Network Keep Alive
Release 7.3.0.2.0.
The ability to set SO_KEEPALIVE on the socket used on client–side to communicate
with a server has been available for a number of releases. This release introduces the
same feature on the server-side socket used to communicate back to the client.
See srv.networkKeepAlive in the Server Configuration Options section of
your Oracle JDBC for Rdb User Guide for more information.
76
5.14 Corrections in Release 7.3.0.2.x
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.0.2.x.
5.14.1 Null pointer Exception during Server viability check by Pool Server
Fixed in Instance Build 20110223 release 7.3.0.2.0.
When the Pool server checks to see if a pooled server is available and has a free client
slot, it is possible that a problem in a disconnect code feature that was added for the
Oracle JDBC for Rdb 7.3.0.0 (V7.3) upgrade may cause a
NullPointerException to be raised by the pooled server.
The pooled server recovers from this exception, but an entry showing the exception is
written to the server log.
This has now been fixed.
5.14.2 MINUS and INTERSECT Problem
Fixed in Instance Build 20110303 release 7.3.0.2.0.
The use of the set operators MINUS and INTERSECT may cause the JDBC SQL
parser to incorrectly allocate dbkey and alias variables within the compound
statement which may raise SQL syntex errors when the statement is compiled by Rdb.
For example, an SQL syntax error will be raised by the following simple query:
select * from employees MINUS select * from employees;
SQLException: in <rdbjdbcsrv:prepare_stmt>
F-RELNOTDEF, Table MINUS is not defined in database or schema:42000
This has now been fixed.
5.14.3 Memory Leak when Executor Process fails to Run
Fixed in Instance Build 20110419 release 7.3.0.2.0.
77
A small memory leak has been found in the Multi-process(MP) Server when the
server attempts to start a new executor process but fails due to a System or a resource
problem. An example of a resource limitation may be insufficient process slots for
the additional executor process.
The MP Server correctly signals the exception however it then fails to recover a small
amount of memory (157 bytes) which may cause process memory depletion if this
situation is repeated many times within the life-time of the server.
This has now been fixed.
5.14.4 Lost Executor not caught by Multi-process Server
Fixed in Instance Build 20110623 release 7.3.0.2.0.
If an executor process terminates unexpectedly while still connected to an active
connection, its is possible that the Multi-process server parent process may not get
notification of the terminations and will wait indefinitely for the executor process to
respond.
This has now been fixed.
5.14.5 Multi-process Native Driver Problem
Fixed in Instance Build 20110623 release 7.3.0.2.0.
During the creation of connection contextes when using the Multi-process feature of
the Native driver , the driver did not adequately synchronize the connect operation.
This may result in unexpected and incorrect behaviour during connection if multiple
threads are concurrently trying to connect to databases within the same process.
This has now been fixed.
5.14.6 PreparedStatement.getGeneratedKeys() Problem
Fixed in Instance Build 20110712 release 7.3.0.2.0.
On the second or subsequent execution of a PreparedStatement, the call to the method
getGeneratedKeys() will fail with the following exception:
oracle.rdb.jdbc.common.RdbException: Closed Resultset
This has now been fixed.
78
5.14.7 Excessive IOs during Metadata Retrieval
Fixed in Instance Build 20111002 release 7.3.0.2.2.
Several SQL queries used by JDBC to retrieve metadata associated with compiled
queries may cause excessive IOs on database systems where the column or table
definitions are volatile and have had many revision during the life of the database.
This problem was introduced in 7.3.0.2.0 and has now been fixed.
5.14.8 Syntax error SQL-F-CONVARUND
Fixed in Instance Build 20111005 release 7.3.0.2.3.
A problem in the determination of the correct table or alias name to use for dbkey
references in the additional SQL syntax added by JDBC to allow correct record
identification may produce SQL syntax exceptions to be raised.
This problem prevents the query from executing correctly, for example:
select * from employees e left join degrees on
(degrees.employee_id = e.employee_id)
will raise the following error:
SQLException: SQLState(RR000) vendor code(-1)
@ oracle.rdb.jdbc.common.RdbException: in <rdbjdbcsrv:prepare_stmt>
@ %SQL-F-CONVARUND, Column qualifier EMPLOYEES is not defined
This problem only occurs in queries that reference two or more tables.
This problem was introduced in 7.3.0.2.0 and has now been fixed.
5.14.9 Multi-process Server Hang
Fixed in Instance Build 20111006 release 7.3.0.2.4.
The Multi-process (MP) server may hang during Resultset close operations.
79
A problem introduced in 7.3.0.2.0 may cause the server to try to execute code outside
the standard application space and cause either a hang in the server process or an
Access Violation.
The MP server may encounter this problem at any time while trying to close
ResultSets , however in the majority of cases the ResultSet close will operate
correctly without problem.
The problem may be seen more readilly in very active MP server processes.
Spurious Rdb Dispatcher errors have also been noted due to this problem.
This problem was introduced in 7.3.0.2.0 and has now been fixed.
5.14.10 SSL Socket Intrusion Problem
Fixed in Instance Build 20111102 release 7.3.0.2.5.
Data injection into an existing open SSL sockets may cause problems with SSL-
enabled Thin Servers.
Socket and Port security scanning software may inject data into exiting open SSL
socket channels that may cause SSLExceptions on that socket. Depending on the
state of the Thin Server at the time of the injection, this intrusion may be handled
incorrectly causing the server process to use excessive CPU.
The SSL connection is not compromised by the intrusion attempt, and the underlying
database connection is not affected.
This has now been fixed.
▲contents
5.15 New Features for Release 7.3.0.1.x
This section describes new and changed features in Oracle JDBC for Rdb 7.3.0.1.x.
5.15.1 Reopen Server Log files using Poll Subcommand
Release 7.3.0.1.0.
80
The thincontroller now has the capability to request servers to re-open their log files
allowing the previous version of the log file to be examined or copied.
Due to a restriction within Java on OpenVMS, log files opened by a Oracle JDBC for
Rdb server cannot be be read or copied while the log files are currently being used by
the server.
The thincontroller from Oracle JDBC for Rdb 7.3.0.1.0 (V7.3-01) , or later from later
releases, used in conjunction with Oracle JDBC for Rdb servers from 7.3.0.1 and later
releases will allow a control user to request that the server re-open its log file by using
the POLL REOPENLOGS subcommand.
See the POLL Sub-commands section of the Oracle JDBC for Rdb User Guide for
more information.
▲contents
5.16 Corrections in Release 7.3.0.1.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.3.0.1.x.
5.16.1 Show Clients not Showing Column Names
Fixed in Instance Build 20100315 release 7.3.0.1.0.
The Show Clients command within the Controller displays information about clients
currently using JDBC servers.
A problem introduced in Oracle JDBC for Rdb 7.3.0.0.0 prevents the column header
information from being displayed correctly.
The data for each client is still displayed correctly but without column identification.
rdbthincontrol> show active clients
Server rdbthnsrv3 (//192.168.1.3:1706/)
00000004*
<CONTROL CONNECTION>
jdbc_user
192.168.1.3:1459
0x16A0(5792)
0x16A0(5792)
81
2010-03-15 09:59:59.296 : INIT_CONTROL
0 00:00
0
1970-01-01 10:00:00.0
rdbthincontrol>
The following shows how the display should look:
rdbthincontrol> show active clients
Server rdbthnsrv3 (//192.168.1.3:1706/)
RDB$CLIENT_ID : 00000006*
RDB$URL : <CONTROL CONNECTION>
RDB$USER : jdbc_user
RDB$IP : 192.168.1.3:1665
RDB$PID : 0x16A0(5792)
RDB$PID_AT_EXECUTOR : 0x16A0(5792)
RDB$LAST_SQL :
RDB$LAST_ACTION : 2010-03-15 10:55:01.312 : INIT_CONTROL
RDB$LAST_EXCEPTION :
RDB$TIME_SINCE_LAST_ACTION : 0 00:00
RDB$MINUTES_SINCE_LAST_ACTION : 0
RDB$LAST_OPEN : 1970-01-01 10:00:00.0
rdbthincontrol>
5.16.2 Batched Statement Fails with MULTIPLE_RECORDS Exception
Fixed in Instance Build 20100611 release 7.3.0.1.0.
To provide additional JDBC driver functionality in Oracle JDBC for Rdb 7.3.0.0.0,
during the preliminary parsing of SQL update or insert statements, the Oracle JDBC
for Rdb drivers may append extra SQL syntax to the query to deliver the dbkey of the
updated or inserted record back to the driver for later processing.
If during the execution of that query, Rdb raises a MULTIPLE_RECORDS
exception, the JDBC drivers will re-issue the statement again without the dbkey
retrieval clause, allowing the update statement to complete succesfully.
If however, the update statement is issued as a batched statement by using the
Statement.addBatch() method, the additional dbkey retrieval code may cause
that batch statement to fail. In which case Oracle JDBC for Rdb does not re-issue the
query and the update will not be done.
The Rdb JDBC drivers have been changed to not add the extra dbkey retrieval code if
the statement is being processed as a batched statement.
82
5.16.3 Incompatibility between 7.3.0.0 Thin Driver and Prior Release Servers
Fixed in Instance Build 20100611 release 7.3.0.1.0.
Ideally, when upgrading Oracle JDBC for Rdb, all components on both the server
systems and all client systems should be updated to the same version at the same
time.
Although not documented nor supported as a feature, Oracle JDBC for Rdb attempts
to maintain upward and downward compatibility between its servers and the Rdb
Thin drivers.
However a change in the initial connection hand-shake between the Thin driver and
server introduced in 7.3.0.0 (V7.3) may prevent applications using the 7.3.0.0.0 Thin
driver from connecting correctly to Oracle JDBC for Rdb servers from earlier Oracle
JDBC for Rdb versions.
The connection of applications using Thin drivers from release prior to 7.3.0.0.0 to a
7.3.0.0.0 server should still work correctly.
These incompatibility issues have now been resolved.
5.16.4 Global Memory leak when Executors are Run-down
Fixed in Instance Build 20100611 release 7.3.0.1.0.
Bug 9787051
A problem in the release of global shared memory when an executor process is run-
down by a Multi-process (MP) server may cause the server to eventually run out of
global memory.
If this happens the following exception will be raised:
System Error : Insufficient global memory
When a MP server runs out of global memory it cannot start-up new executor
processes.
As this problem occurs when an executor is run-down when it is no longer required, a
work-around for this problem is to increase the maxFreeExecutor count for the
server to a number that will be sufficient to handle the peak load of the server and to
increase the server sharedMem appropriately.
83
This has now been fixed.
5.16.5 Autorestart on Pooled Servers not Working
BUG 9656632
Fixed in Instance Build 20100611 release 7.3.0.1.0.
When a Pool server starts a child server that is marked for autorestart, the child server
information is placed on a queue that is periodically checked by the Pool server to
ensure the child server is still viable.
If the Pool server finds that the child is not available and that child server is marked
for autorestart, the Pool server will try to restart that server.
A problem was introduced in Oracle JDBC for Rdb 7.3.0.0.0 (V7.3) within the Pool
server code that caused the Pool server to incorrectly mark a newly started child
server as “failed in startup”.
If the pool server thinks that the child server did not start correctly the server will not
be placed in the check queue used to determine if the child server is still available.
This in turn means that the pool server will not automatically restart the child server if
the child server process subsequently dies.
This has been fixed.
5.16.6 setFetchSize() hint Ignored by PreparedStatement
Fixed in Instance Build 20100623 release 7.3.0.1.0.
In prior versions of Oracle JDBC for Rdb, the execution of setFetchSize()
method on a PreparedStatement would be silently ignored.
The connected server process would determine the fetch size of subsequent
operations on the PreparedStatement and ignore the fetch size hint provided.
This behavior has now been changed. The fetch size hint provided by the execution
of the setFetchSize() method on a PreparedStatement prior to the
execution of the statement may now be taken into account by the server when
determining the number of records that should be sent in one network IO operation.
As this is only a hint, the connected server may still choose to ignore it.
84
5.16.7 Missing Stmt Exception on Subsequent Execution of PreparedStatement
Fixed in Instance Build 20100623 release 7.3.0.1.0.
The second or subsequent execution of a PreparedStatement may raise the
following exception:
java.sql.SQLException: Missing Stmt in rdbSelect
@rdb.Client.SELECT
This exception may be raised on any subsequent executions of the same
PreparedStatement object if the prior execution of the same statement retrieved a
greater number of records than the connected server’s fetch size.
The following example will show this errant behavior if the fetchSize specified for
the connected server is less than 10 rows:
.
.
.
try
{
ps = conn.prepareStatement(
"select last_name from employees limit to 10 row");
ResultSet rs = ps.executeQuery();
while (rs.next())
{
System.out.println(" result1 <" + rs.getString(1) + ">");
}
rs = ps.executeQuery(); //<<<<<< this would fail
while (rs.next())
{
System.out.println(" result2 <" + rs.getString(1) + ">");
}
}
finally
{
if ( ps != null ) ps.close();
}
.
.
.
This problem was introduced in 7.3.0.0.0 (V7.3) JDBC and only occurs when using
the Oracle JDBC for Rdb thin driver.
5.16.8 EOFException on READ_ROW with Nested Statements
85
Fixed in Instance Build 20100629 release 7.3.0.1.0.
A problem in statement context handling may cause the following exception to be
raised:
java.io.EOFException @rdb.Client.READ_ROW
This problem may occur when the following conditions are met.
1. A select query is executed as the outer query
2. An update statement is executed as an inner statement
3. The fetch size of the select query is less than the total number of records
returned by the query
4. Fetch Size number of record have already been returned by the outer query
An example of code which may show this problem is shown below:
.
.
. Statement stmt = conn.createStatement(); stmt.setFetchSize(10); // less than the total number of records
PreparedStatement ps = conn.prepareStatement (
"update job_history set supervisor_id = '00245' where "+
"employee_id= ?");
ResultSet rset = stmt.executeQuery(
"select employee_id from employees limit to 20 rows");
int i = 0;
try
{
while (rset.next())
{
i = i + 1;
System.out.println(i + " " +
rset.getString("employee_id"));
ps.setString(1, rset.getString("employee_id"));
ps.executeUpdate();
}
}
catch (SQLException sqle)
{
sqle.printStackTrace();
}
.
.
.
5.16.9 DatabaseMetaData.getUDTs()
Fixed in Instance Build 20100702 release 7.3.0.1.0.
86
Although Rdb does not currently support UDTs you may still retrieve the column
descriptions from the empty Resultset produced when the method
DatabaseMetaData.getUDTs() is called.
However a problem in the retrieval of the last column from the ResultSetMetaData
may result in a Null Pointer exception.
java.lang.NullPointerException
This has now been fixed.
5.16.10 Using Multi-process with the JDBC Native Driver
Fixed in Instance Build 20100718 release 7.3.0.1.0.
A problem was introduced in Oracle JDBC for Rdb 7.3.0.0.0 (V7.3) preventing the
use of the multi-process option within JDBC Native driver connections.
When a connection is attempted using the JDBC Native driver with a connection
URL that contains the @multi-process=true switch the following exception
was raised:
INFO: server version needs to be V7.3 or later
This has now been fixed.
5.16.11 Prepared Statement not Closing underlying Cursor
Fixed in Instance Build 20100721 release 7.3.0.1.0.
A problem introduced in Oracle JDBC for Rdb 7.3.0.0.0 (V7.3) prevents
PreparedStatements containing select statements from correctly closing cursors when
the statement is re-executed but no results set read was issued on the previous
execution of the same prepared statement instance.
The following exception may be raised:
%SQL-F-CURALROPE, Cursor C_xxxxxxxxx was already open
The following code snippet show an example of the type of code that may show this
problem:
.
87
.
.
String sql = "select dbkey from employees";
ResultSet rs;
int maxi = 10;
PreparedStatement st=conn.prepareStatement(sql);
for(int j=0;j<maxi;j++)
{
rs=st.executeQuery();
rs.close(); // note: no read on the resultset
// issued within the iterating block
}
.
.
.
The problem would be seen on the second and subsequent iterations of the
executeQuery.
This has now been fixed.
5.16.12 Release Statement Synchronization Problem
Fixed in Instance Build 20100802 release 7.3.0.1.0.
Oracle JDBC for Rdb release 7.3.0.0.0 (V7.3) introduced improvements in the
network handling of selection statements. A problem in the optimization of network
IOs introduce in release 7.3.0.0.0 may produce the following exception during
statement release:
oracle.rdb.jdbc.common.RdbException: received 503316549(0x4500001E)
: expected 1 @rdb.Client.RELEASE_STMT
This problem may occur only when the following conditions have been met:
1. A select statement has been executed.
2. Statement select optimization has not been turned off.
3. The total size of a FetchSize number of records is greater than 9600 bytes.
4. The statement is closed before any records have been read from the
associated resultset.
This has now been fixed.
5.16.13 Unitialized SQLCA Block in MP server
Fixed in Instance Build 20100906 release 7.3.0.1.0.
88
A problem in how internal SQLCA blocks were initialized by the Multi-process
server may cause a nested exception to be raised during exception handling.
The SQLCA block failed to initialize correctly which may cause incorrect message
size information to be used when the server tries to dump out the underlying error
message, which in turn may cause the server to try to access incorrect memory
addresses.
This problem may lead to various access violation exceptions including :
%CXXL-F-TERMINATE, terminate() or unexpected() called
Improperly handled condition, image exit forced by last chance
handler.
This has now been fixed.
5.16.14 Controller SHOW CLIENTS and MP Server Problem
Fixed in Instance Build 20100315 release 7.3.0.1.0.
Note
This problem was reported fixed in Oracle JDBC for Rdb release 7.3.0.0.0 but
unfortunately, the fix was incomplete.
When the command SHOW CLIENTS or SHOW ALL CLIENTS is issued within the
Controller, if the recipient server is a Multi-process server (MP Server), an executor
process may be started up by the server to execute the request.
A problem in the executor code prevents the executor from closing down correctly if
the maximum number of free executors has already been reached for the MP Server.
This new executor process will not be added to the free executor pool, but will not be
shutdown and thus will remain active on the system.
If the controller SHOW CLIENTS command is issued again, the number of executor
processes may increase until an Open VMS quota or process quota is exceeded.
This problem has now been fixed.
89
5.16.15 Documentation Error – Record Streaming
In the Oracle JDBC for Rdb 7.3.0.0.0 release notes the Performance Enhancements
subsection of the New Features section mentions that Record Streaming is available
from release 7.3.0.0.0 onwards.
Unfortunately a number of problems required the removal of this feature prior to the
7.3.0.0.0. release, but the 7.3.0.0.0 releases notes were not correctly updated to
remove reference to the feature prior to product shipment.
This feature may be made available in a later release of Oracle JDBC for Rdb.
5.16.16 ResultSet.updateRow() and ResultSet.deleteRow() Problem
Fixed in Instance Build 20110127 release 7.3.0.1.0.
Bug 9668574
A problem introduced in release 7.3.0.0.0 prevents ResultSet.updateRow() and
ResultSet.deleteRow() from working correctly.
During the execution of the update one of the following errors may be raised:
Internal Error
or
SQL-F-SYNTAX_ERR, SYNTAX ERROR
This has now been fixed.
5.16.17 Problem using Column Renaming with dbkey
Fixed in Instance Build 20110127.
Changes to SQL statetment parsing introduced in release 7.3.0.0.0 inadvertantly
introduced a problem in queries that access the dbkey of records directly.
For example the following query:
90
select dbkey as ID, last_name from employees;
may cause the following exception to be raised:
Exception: Unhandled [email protected] :
java.lang.ArrayIndexOutOfBoundsException:S1000
This problem only occurs when the dbkey is retrieved as the first named column of
the selection expression and the column name is changed by using the ‘AS’ clause.
Some simple work-arounds are:
1. move the dbkey clause to the second or subsequent column reference:
select last_name, dbkey as ID from employees;
2. Remove the column renaming:
select dbkey, last_name from employees;
This has now been fixed.
5.16.18 Class cast error on Scaled integer Retrieval after ResultSet.insertRow()
Fixed in Instance Build 20110128 release 7.3.0.1.0.
During the conversion of a scaled integer invoked by a ResultSet object retrieval the
following error may be raised:
oracle.rdb.jdbc.common.RdbException: Connection lost
: java.lang.Long
@rdb.Client.GET_INT_VAL
This problem occurs when:
● The object retrieved is a scaled integer
● Immediately prior to the retrieval a ResultSet.insertRow() was carried out on
the same ResultSet
The following code example will show this problem during the call to the getInt()
method:
91
.
.
.
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from JOBS");
rset.moveToInsertRow();
rset.updateString("JOB_CODE", "JAVA");
rset.updateString("WAGE_CLASS","1");
rset.updateString("JOB_TITLE","Java Tester");
rset.updateInt("MINIMUM_SALARY",90000);
rset.updateInt("MAXIMUM_SALARY",250000);
rset.insertRow();
while (rset.next())
{
System.out.println(rset.getString("JOB_TITLE"));
System.out.println( "min salary = " +
rset.getInt("MINIMUM_SALARY"));
}
.
.
.
This has now been fixed.
5.16.19 ResultSet.deleteRow() Behaviour Change
Fixed in Instance Build 20110201 release 7.3.0.1.0.
Prior to the V4.0 JDBC specification, the current row positioning after resultset-
based record deletion was not clearly defined in the JDBC specification.
In prior releases of Oracle JDBC for Rdb the row position would remain at the same
absolute position after the row has been removed. Thus, for example, if the deletion
row was the 10th
row, then after removing the record, the current row position would
still be the 10th
record within the resultset, effectively moving the remaining records
down one position.
This may cause unexpected behaviour while traversing the resultset. For example,
the following code will delete every second record in the resultset as after each
deletion the remaining rows would be shifted down one position:
.
.
.
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rset = stmt.executeQuery ("SELECT * FROM employees");
while (rset.next ())
92
{
System.out.println("Select: " + rset.getString (1) );
rset.deleteRow();
}
.
.
.
To remove each row the row position would have to be reset each time back to the
prior row:
.
.
.
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rset = stmt.executeQuery ("SELECT * FROM employees");
while (rset.next ())
{
System.out.println("Select: " + rset.getString (1) );
rset.deleteRow();
rset.previous();
}
.
.
.
In V4.0 of the JDBC specification, the row position after deletion using the
ResultSet.deleteRow() is now specified:
After the method deleteRow has been called, the cursor will be positioned before the next valid row.
If the deleted row is the last row, the cursor will be positioned after the last row.
Oracle JDBC for Rdb drivers have now been changed to comply with this behaviour.
The resetting of the row position using rset.previous() as shown in the example
above is no longer required.
5.16.20 Underlying Blob Handles not Released when using ResultSet.getBlob()
Fixed in Instance Build 20110201 release 7.3.0.1.0.
The ResultSet.getBlob() method may be used to return the contents of an Rdb
segmented string column to your application as a Blob object.
A problem in the underlying Rdb statements associated with the retrieval of
segmented strings prevented the handles from being released correctly.
93
This may lead to memory problems in the Oracle JDBC for Rdb server or the Java
application if many Blobs are being retrieved.
In addition as these statements are compiled and not released, operations such as
DROP TABLE may be blocked if attempted subsequent to and within the same
connection as Blob operations.
The following exception may be raised:
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-F-ACTQUERY, there are queries compiled that reference relation
…
This has now been fixed.
5.16.21 Sequence Values not Visible to ResultSet get Methods using Column Name
Fixed in Instance Build 20110204 release 7.3.0.1.0.
Bug 9659036
The retrieval of data from ResultSet columns using any of the ‘by name’ methods fail
when the column is one of the special sequence operations such as nextval or currval.
The following code will raise an exception when the second println statement is
called:
.
.
.
ResultSet rs = s.executeQuery(
"select reportseq.nextval from rdb$database" );
if (rs.next())
{
System.out.println(" by id = " + rs.getBigDecimal(1) );
System.out.println(" by name="+
rs.getBigDecimal("reportseq.nextval"));
}
.
.
.
The following exception will be raised:
94
Invalid column name
A similar problem may be seen when trying to retrieve column names using the
ResultSetMetaData.getColumnName() method:
.
.
.
ResultSet rs = s.executeQuery(
"select reportseq.nextval from rdb$database" );
ResultSetMetaData rsMetaData = rs.getMetaData();
String columnName = rsMetaData.getColumnName(1);
while (rs.next ())
{
System.out.println("Select: " + rs.getBigDecimal(columnName));
}
rs.close();
.
.
.
The column name returned by the ResultSetMetaData method will be an empty
string and subsequent use of this value will fail to retrieve any column information.
As the first example shows, a work-around for the first problem is to use the column
index instead of the name in the get method.
An alternate work-around is to use a column alias in the query.
.
.
.
ResultSet rs = s.executeQuery(
"select reportseq.nextval as NEXT_ID from rdb$database" );
if (rs.next())
{
System.out.println("by name = " +rs.getBigDecimal("NEXT_ID"));
}
.
.
.
There is no work-around for the ResultSetMetaData.getColumnName()problem.
These problems have now been fixed.
95
5.16.22 Scaled Integer Problem
Fixed in Instance Build 20110208 release 7.3.0.1.0.
The Oracle JDBC for Rdb native driver may fail to return the values of scaled integer
columns correctly.
If the column size is less than 4 octets and has a scaling factor other than 0 the native
driver may return wrong values.
Columns with the following datatypes are affected:
● SMALLINT(n)
● TINYINT(n)
This problem only occurs when using the native driver; the thin driver will return the
values correctly.
SMALLINT and TINYINT columns not using scaling are not affected.
This has now been fixed.
5.16.23 Server Matching Exception may Stop Poll Handling
Fixed in Instance Build 20110210 release 7.3.0.1.0.
If a server finds an exception during the handling of a server control function such as
a POLL request, the server will log the exception and then close down asynchronous
broadcast request handling.
This means that from that point onwards, operations such as ThinController POLLing
will no longer be acknowledged by the server.
Standard client and control function are not affected and the server will keep on
handling client requests correctly, however it will no longer respond to control
requests such as POLL.
A simple example of this behavior can be shown by issuing a server name matched
POLL request containing an invalid pattern string:
rdbthincontrol> poll #name:*srv*.
The server will log the following exception:
96
Dangling meta character '*' near index 0
*srv*.
^
The server will not respond to further POLL request until it has been restarted.
This behaviour has now been changed. The server will still log the exception but
unless the problem is a network IO problem or the server is in the process of shutting
down, the asynchronous broadcast request handling will still be enabled. Thus
operations such as POLL request handling will still be carried out by the server.
The only workaround is to restart the server again.
This has now been fixed.
▲contents
5.17 New Features for Release 7.3.0.0.x
This section describes new and changed features in Oracle JDBC for Rdb 7.3.0.0.x.
5.17.1 Shutdown Thread
Starting with Oracle JDBC for Rdb release 7.3.0.0.0 (V7.3) the JDBC drivers will
create a shutdown thread when they are initially invoked. The purpose of this thread
is to use the shutdown-hook feature provided by OpenVMS that will execute the
thread at shutdown. The shutdown thread will ensure that any connection left open
by the application will be correctly disconnected prior to the application shutdown
proceeding, thus preventing application hangs at shutdown.
The application developer does not need to change any code for this shutdown feature
to be enabled, as long as the application is using Oracle JDBC for Rdb 7.3.0.0.0
driver libraries (or later versions) the shutdown hook will be in place.
See the section Shutdown Thread in the Oracle JDBC for Rdb User Guide for
details.
5.17.2 Driver.attach()
Release 7.3.0.0.0.
A new method has been added to the Oracle JDBC for Rdb drivers, that will allow
second and subsequent databases to be attached to an existing database connection.
97
See the Oracle JDBC for Rdb User Guide for details.
5.17.3 Returning List of Known Databases
Release 7.3.0.0.0.
The Oracle JDBC for Rdb Thin Driver will now allow client applications to obtain a
list of databases known to Oracle JDBC for Rdb servers.
See the Oracle JDBC for Rdb User Guide for details.
5.17.4 Controller Enhancements
Release 7.3.0.0.0.
Several enhancements have been made to the Oracle JDBC for Rdb Thin Controller
application including:
● Obfuscate command
● Server matching patterns for the POLL command
See the Oracle JDBC for Rdb User Guide for details.
5.17.5 RDB_EXT.JAR file
Release 7.3.0.0.0.
Oracle JDBC for Rdb release 7.3.0.00 installation now includes the RDB_EXT.JAR
file that contains classes and Java source for extensions to Oracle JDBC for Rdb.
The following extensions are include:
● Hibernate RdbDialect.java source
● Oracle UCP enabling classes
Details of these extensions follow.
5.17.5.1 Hibernate RdbDialect.java Source
Release 7.3.0.0.0.
Hibernate by Red Hat is a persistence engine that provides an alternative to standard
entity beans.
98
To allow Oracle JDBC for Rdb drivers to be used in conjunction with Hibernate the
RdbDialect.java source file is provided. You will find this source file in the top-level
folder of the RDB_EXT.jar.
See your Hibernate documentation for details on using third party JDBC drivers and
Dialects.
5.17.5.2 Oracle UCP Enabling Classes
Release 7.3.0.0.0.
UCP or, Universal Connection Pool, is a new database feature included in Oracle
database 11g 11.1.0.7, Oracle database 11.2.0.x and Oracle AS 11g R1. UCP works
with any Java based connections, e.g., JDBC, JCA, LDAP.
The RDB_EXT.JAR file installed with Oracle JDBC for Rdb, provides the necessary
classes to enable Oracle JDBC for Rdb drivers to be used in the connection pools
created by UCP.
The class:
oracle.rdb.jdbc.rdbExt.RdbDataSource
found in the RDB_EXT.JAR may be used as a Connection Factory class for UCP,
for example:
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
.
.
.
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName(
"oracle.rdb.jdbc.rdbExt.RdbDataSource");
pds.setURL("jdbc:rdbThin://localhost:1701/my_dir:mf_personnel");
pds.setUser("jdbc_user");
pds.setPassword("jdbc_user");
pds.setInitialPoolSize(0);
Connection conn2 = null;
for (int i = 0; i< 5 ; i++ )
{
conn2 = pds.getConnection();
Statement sc = conn2.createStatement();
.
.
.
rs.close();
sc.close();
conn2.close();
}
.
.
.
99
For more details, see the UCP Users Guide at
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
5.17.6 Performance Enhancements
Release 7.3.0.0.0.
Several enhancements have been made to the client/server connectivity and to
server/executor communications to improve performance including:
● Internal client/server message protocol changes
● Enhanced SQL Statement caching
● Results caching
● Server/executor synchronization
Details of these enhancements may be found in the following sub-sections.
5.17.6.1 Internal client/server message protocol changes
Release 7.3.0.0.0.
Network round-trip times for communication between client applications and JDBC
servers may constitute a large portion of wait time for applications. To help reduce
this wait time Oracle JDBC for Rdb has changed its client/server message protocol in
order to reduce the number of round-trips taken to:
● Attach to the database
● Compile and execute a SQL statement.
These enhancements are enabled automatically from V7.3 onwards.
5.17.6.2 Enhanced SQL Statement Caching
Release 7.3.0.0.0.
As well as caching of certain statement information on the client-side, reducing the
number of network IOs required for statement compilation, 7.3.0.0 allows the caching
of statement handles. See the sections SQL Statement Cache and Caching Statement
Handles in the Oracle JDBC for Rdb User Guide for more details.
5.17.6.3 Results Caching
Release 7.3.0.0.0.
100
7.3.0.0 will allow limited caching of resultSets on the client side. This is particulary
useful in multi-tiered environments for statements that are repeatedly executed giving
the same results each time, especially in a pooled connection environment. See the
section Results Cache in the Oracle JDBC for Rdb User Guide for more details.
5.17.6.4 Server/Executor Synchronization
Release 7.3.0.0.0.
Starting with release 7.3.0.0.0, the method used to synchronize operations between a
Multi-process server and its sibling executors has been improved to reduce the
amount of CPU required and to speed-up operations.
▲contents
5.18 Corrections in Release 7.3.0.0.x
This section describes software errors corrected in Oracle JDBC for Rdb 7.3.0.0.x.
5.18.1 Server Startup Failure when using CFG File
Fixed in Instance Build 20090201 release 7.3.0.0.0.
A problem in parsing the configuration file during server startup may cause the server
to fail to startup correctly.
The following is an example of the error message seen:
$ java "-jar" "rdb$jdbc_home:rdbthinsrvpool.jar" –
"-cfg" rdbjdbc_cfg.cfg "-srv.mcGroupIP" "239.8.124.3" Configuration file problem at line 1 Content is not allowed in prolog.
This problem only occurs when using JDK 1.5-0 and above and using a Properties
file (*.cfg) to hold the server configuration properties.
A work-around for this problem is to use an XML-based configuration file instead.
101
5.18.2 AccessViolation on Disconnect when Inserting Blobs
Fixed in Instance Build 20090301 release 7.3.0.0.0.
A problem in determining the memory allocation for Blob variables may result in a
memory Access Violation during disconnect.
The problem only occurs if during the connection, data was inserted into Blob
variables and subsequently inserted into a segmented string column in the database.
This has now been fixed.
5.18.3 PreparedStatement and Parameter Markers Known Problem now Resolved
Fixed in Instance Build 20090702 release 7.3.0.0.0.
In previous version of Oracle JDBC for Rdb the following known problem was noted:
Using PreparedStatement and Parameter Markers
During the creation of a prepared statement using the
Connection.PrepareStatement() method, the Oracle JDBC for Rdb
drivers call Oracle Rdb SQL to compile the SQL statement and describe its select
fields and parameter markers. At this time SQL builds internal message
representations of the parameter markers that may be passed to Oracle Rdb when
the prepared statement is executed.
The maximum size of character values that may be passed using each parameter
marker is fixed by SQL at this stage. This may cause inconsistent results when the
application attempts to use character string values that are longer than the
maximum size determined by SQL for that parameter.
If the input value is longer, the value will be truncated by SQL prior to being sent
to Oracle Rdb for processing.
This does not pose any problems if the query selection is equality, however, other
Boolean comparisons may cause unexpected results. For example, this query will
return the record:
.
.
. Statement stmt = conn.createStatement();
stmt.execute("create table tab (f1 char(3))");
102
stmt.execute("insert into tab values ('123')");
PreparedStatement ps;
ps = conn.prepareStatement( "select f1 from tab where f1 like ?");
ps.setString(1, "123");
ps.execute();
.
.
.
This query will not return the record:
.
.
.
ps.setString(1, "%123");
ps.execute();
.
.
.
The reason the above query fails is that SQL will set the maximum size of the
parameter text string to 3 characters (the size of field F1). The input value will be
truncated to %12 before being sent to Oracle Rdb and will not match the record.
In conjunction with changes made to Oracle Rdb 7.2.4.0.0 (V7.2-4), this problem has
now been resolved and queries similar to the ones shown above should now deliver
the correct results.
This fix will only work with Oracle Rdb versions 7.2.4.0.0 and higher.
5.18.4 Controller SHOW CLIENTS and MP Server Problem
Fixed in Instance Build 20090821 release 7.3.0.0.0.
When the command SHOW CLIENTS or SHOW ALL CLIENTS is issued within the
Controller, if the recipient server is a Multi-process server (MP Server), an executor
process may be started up by the server to execute the request.
A problem in the executor code prevents the executor from closing down correctly if
the maximum number of free executors has already been reached for the MP Server.
This new executor process will not be added to the free executor pool, but will not be
shutdown and thus will remain active on the system.
If the controller SHOW CLIENTS command is issued again, the number of executor
processes may increase until an Open VMS quota or process quota is exceeded.
Note
103
This problem was not completely fixed in the 7.3.0.0.0 release. This has
subsquently been rectified in the 7.3.0.1.0 release.
5.18.5 Possible Memory Leak when Updating Blob Columns
Fixed in Instance Build 20090827 release 7.3.0.0.0.
During the processing of update statements containing references to Blobs (list of
byte varying) columns, the JDBC drivers incorrectly compile the statement twice.
Only the second statement handle is released when the statement is closed which will
lead to Rdb statement handles still being active within the current connection.
These active handles use memory and resources within the drivers and the Rdb
system which may eventually lead to problems due to insufficient resources in long
running connections.
In addition these compiled queries may prevent metadata operations from occurring
on the affected tables within the current connection.
5.18.6 Access Violation with Trace and Network Dump
Fixed in Instance Build 20090904 release 7.3.0.0.0.
When the following trace flags are set together in TraceLevel, it is possible that an
access violation may occur if the size of the data being flushed to the network is very
large:
Bit Hexadecimal
Value
Decimal
Value
Traces
9 0x00000200 512 Network sends
30 0x40000000 1073741824 Full provides more details
on certain flags
For example, when inserting a Blob with more than 3MB of data the dump of the
network buffer may overflow memory and cause memory problems that will
terminate the server unexpectedly.
104
This problem only occurs with RdbThin connections using either a standard or a
Multi-process server.
5.18.7 Named Input Parameters not Working with CallableStatements
Fixed in Instance Build 20100210 release 7.3.0.0.0.
Using named parameters to set input parameter values of CallableStatements may fail
with the following exception:
oracle.rdb.jdbc.common.RdbException: Invalid column name :
The JDBC code fails to locate input parameters by name correctly.
An example of the type of code statement that may be affected:
.
.
.
stmt.executeUpdate("create module myproc " +
"LANGUAGE SQL " +
"procedure myproc(IN :val_in integer; OUT :val_out" +
"BEGIN " +
" SET :val_out = :val_in; " +
"END; END MODULE");
CallableStatement proc = conn.prepareCall(
"{ call myproc(?,?) }");
proc.setInt("val_in", 999);
.
.
.
Exception raised when executing the proc.setInt() method:
oracle.rdb.jdbc.common.RdbException: Invalid column name : val_in
Input parameters are marked as IN in the procedure definition.
Parameters marked as OUT or INOUT will be located correctly by the JDBC code.
A work-around for the problem is to specify the parameter index value instead of the
name.
105
▲contents
5.19 New Features for Release 7.2.5.5.x
This chapter describes new and changed features in Oracle JDBC for Rdb release
7.2.5.5.x.
None.
▲contents
5.20 Corrections in Release 7.2.5.5.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.5.5.x.
5.20.1 Long-running Query Holds up New Connections in MP Server
Fixed in Instance Build 20091202 release 7.2.5.5.0.
A problem in retrieving the Process Id of the current thread during the creation of a
new connection by the MP Server may cause the connection to hang.
This problem may be seen when an existing connection using the same MP Server is
concurrently preparing a very large SQL statement or is executing a query that is
taking substantial time within Rdb to fetch the very first record.
Any concurrent new connection requests will hang until the long-running query
returns the query compilation results or returns the first record back to the MP Server.
All other pre-established connections using the same MP Server will execute queries
normally and will not hang, only new connection requests are affected.
This has now been fixed.
106
▲contents
5.21 New Features for Release 7.2.5.4.x
This chapter describes new and changed features in Oracle JDBC for Rdb release
7.2.5.4.x.
None.
▲contents
5.22 Corrections in Release 7.2.5.4.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.5.4.x.
5.22.1 Access Violation at Java_rdb_JNI_SetStrVal
Fixed in Instance Build 20080720 release 7.2.5.4.0.
A problem in a memory copy used within the JNI routine SetStrVal() may cause an
access violation similar to the following:
SYSTEM-F-ACCVIO, access violation, reason mask=00
.
.
.
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
.
.
.
RDBJDBCSHR72 RDBJDBC Java_rdb_JNI_SetStrVal
.
.
.
This problem is infrequent as it depends on how memory is allocated during the
native code execution, and is usually only associated with JDBC code executing the
setString() method of a PreparedStatement or CallableStatement.
This has now been fixed.
107
5.22.2 DCL Command Line Too Long
Fixed in Instance Build 20080826 release 7.2.5.4.0.
During the startup of a server either by a Pool Server or by using the Controller, DCL
command procedures are used to build the DCL command to invoke the server image.
It is possible that long directory names or deep directory structures associated with
the log file or the configuration files for the server may cause the size of the DCL
command created to exceed the length limits set for a command line by OpenVMS.
In this case the startup of the server will fail and the following exception may be
noted in the output of the server startup process:
%DCL-W-TKNOVF, command element is too long – shorten
The RDBJDBC_STARTSRV.COM has now been changed to reduce the number of
options that need to present on the command line by introducing another
configuration file that will be built each time the RDBJDBC_STATSRV.COM
command procedure is executed. This new command procedure will contain the
required configuration information necessary to correctly start the server.
5.22.3 Access Violation during DriverManager.getConnection() when Database Specification is Missing
Fixed in Instance Build 20080826 release 7.2.5.4.0.
If during a call to DriverManager.getConnection() the specified connection string
does not contain a database file specification a problem in the building of the
connection string to be sent to Rdb may force an unexpected termination of the
connecting server with the following exception:
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at
PC=0x18965EEB
Function=[Unknown.]Library= … \rdbjdbcshr.dll
NOTE: We are unable to locate the function name symbol for the error
just occurred. Please refer to release documentation for possible
reason and solutions.
Current Java thread:
at rdb.JNI.Connect(Native Method)
108
at
oracle.rdb.jdbc.common.AbstractNativeRdb.Connect(AbstractNativeRdb.java:301)
at
oracle.rdb.jdbc.srv.DBActionHandler.handleConnect(DBActionHandler.java:3844)
The actual exception raised depends on the platform and Java VM and may include:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# %SYSTEM-F-ACCVIO (0xc) at pc=84C1A4A0, pid=543163880, tid=63640192
and
SIGBUS 10* bus error
.
.
.
%SYSTEM-F-OPCCUS, opcode reserved to customer fault at PC=FFFFFFFF80B6EF14,
PS=0000001B
.
.
.
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual address
=000000000000
0000, PC=FFFFFFFF80A708E8, PS=0000001B
and similar variants of the Access Violation messages.
This has now been fixed.
5.22.4 Unaligned Memory Faults on IA64
Fixed in Instance Build 20090826 release 7.2.5.4.0.
Several unaligned memory faults have been located and fixed in the shared images
associated with Oracle JDBC for Rdb on IA64.
5.22.5 Read-Only Transactions not Enforced on Connection Switch
Fixed in Instance Build 20090902 release 7.2.5.4.0.
When the connection switch:
109
Transaction=readonly
is used, all transactions started by the Oracle JDBC for Rdb drivers should be forced
to READ-ONLY. However this is not correctly enforced if AUTOCOMMIT is
subsequently turned OFF and it is possible that READ-WRITE transactions may be
started on subsequent select statements.
This has now been fixed.
5.22.6 Sockets not Correctly Closing on OpenVMS Clients causing Accumulation of Mailboxes
Fixed in Instance Build 20091002 release 7.2.5.4.0.
During the Close() of Connections using the Thin driver, sockets connecting
the client to the server will be closed and resources released. However a problem
with the release of data streams associated with these sockets prevents the sockets
from closing down completely.
The failure for the sockets to completely close down may cause problems on clients
running on OpenVMS. The mailboxes associated with TCP/IP sockets on OpenVMS
will not be closed and will accumulate for processes that do multiple connects and
disconnects using the JDBC Thin driver.
This problem only happens with clients running on OpenVMS and may depend on
the Java version and type of VM used.
The associated data streams are correctly closed down when the Connection class
is disposed, however unless explicitly disposed by the client application, the
Connection class object will continue to exist after the connection is closed and
until the JAVA garbage collection causes it to be disposed.
It is possible that the process may run out of TCP/IP ports or OpenVMS resources
due to this accumulation of mailbox channels, but this depends on how often the Java
garbage collection is run and whether or not the objects are collected.
This problem has now been fixed.
5.22.7 Cast problem when Converting String to Date/Time
Fixed in Instance Build 20091007 release 7.2.5.4.0.
110
A problem in the JDBC driver code that converts String to the internal data format
required for storing to an Rdb date/time column may cause the following exception to
be raised.
java.lang.ClassCastException: java.util.Date
This problem occurs when a date/time value stored in its text form is used to set a
parameter in a PreparedStatement or CallableStatement that is associated with an Rdb
column or variable that has one of the following SQL datatypes:
● DATE ANSI
● DATE VMS
● TIME
● TIMESTAMP
For following code example will raise the exception described above.
.
.
.
// SQL : create table tabx (f1 date vms);
PreparedStatement ps = conn.prepareStatement
("insert into TABX values (?)");
String dtStr = "2003-11-07 12:34:56.780";
ps.setString(1,dtStr);
.
.
.
A workaround for this problem is to use a Java date/time conversion method to
convert from the String to a Java timestamp and then use the setTimestamp method
instead of the setString method.
String dtStr = "2003-11-07 12:34:56.780";
Timestamp dt = Timestamp.valueOf(dtStr);
ps.setTimestamp(1,dt);
This problem has now been fixed.
▲contents
111
5.23 New Features for Release 7.2.5.3.x
This chapter describes new and changed features in Oracle JDBC for Rdb release
7.2.5.3.x.
None.
▲contents
5.24 Corrections in Release 7.2.5.3.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.5.3.x.
5.24.1 Interaction of DatabaseMetaData methods with Blobs may Crash the Thin Server
Fixed in Instance Build 20080327 release 7.2.5.3.0.
During the retrieval of RDB$DESCRIPTION data from Rdb System relations for the
inclusion into the resultSets returned by various methods within the
DatabaseMetaData class, the Oracle JDBC for Rdb Thin Server must create and
execute List Cursors.
A problem in the synchronization of access during List Cursor operations during
metadata retrieval meant that windows of opportunity exist where the thread currently
accessing the List Cursor may interfere with other concurrent threads accessing the
database from the same Thin Server.
This may result in variety of exceptions and/or bugchecks being raised. In some
cases the Thin Server may terminate unexpectedly with or without log or bugcheck
messages.
This problem only occurs within Thin Servers and only during DatabaseMetaData
method calls where description or comment data is being returned for the database
object, and only if there is another concurrent connection executing SQL statements.
For example, drilling-down Rdb database connection metadata within JDeveloper
using an Oracle JDBC for Rdb thin driver connection to a Thin Server may interfere
with concurrent clients on that same server.
112
This has now been fixed.
5.24.2 BigDecimal scaling Incorrect when used with PreparedStatement SetObject() Methods
Fixed in Instance Build 20080623 release 7.2.5.3.0.
The scaling of BigDecimal objects may be incorrect when used as the source data
objects for PreparedStatement.SetObject() methods.
During the conversion of the BigDecimal to the underlying database datatype, scaling
information is lost which may result in the wrong values being applied.
A work-around for this problem is to use the
PreparedStatement.SetBigDecimal() methods instead.
This problem has now been fixed.
5.24.3 Connection.nativeSQL() method Throws Null Pointer Exception
Fixed in Instance Build 20080623 release 7.2.5.3.0.
Calling the Connection.nativeSQL() method will result in a
NullPointerException exception being raised.
This has now been fixed.
5.24.4 Calling Resultset.isLast() method May Change Transaction Behavior
Fixed in Instance Build 20080625 release 7.2.5.3.0.
This problem affects the Oracle JDBC for Rdb Native driver only. Applications using
the Oracle JDBC for Rdb Thin driver will not see this problem.
When the native driver is used, calling the Resultset.isLast() method will cause the
driver to fetch all the records of the resultSet to determine which is the last record.
During this processing the internal transaction status is set incorrectly. If a SQL
statement requiring a read-write transaction is executed subsequent to this but prior to
the resultSet's statement being closed, the update statement may fail with the
following exception:
%RDB-E-READ_ONLY_TRANS, attempt to update during a read-only
113
transaction
This has now been fixed.
▲contents
5.25 New Features for Release 7.2.5.2.x
This chapter describes new and changed features in Oracle JDBC for Rdb release
7.2.5.2.x.
5.25.1 DEC_KANJI and DEC_HANZI Support Enabled
Release 7.2.5.2.0.
Support was added to V7.1.3 Oracle JDBC for Rdb Drivers for accessing
DEC_KANJI and DEC_HANZI data from Oracle Rdb databases but until now had
not been adequately tested, so Oracle advised against using Oracle JDBC for Rdb
drivers to access DEC_KANJI and DEC_HANZI data from Oracle Rdb databases.
Testing of Oracle JDBC for Rdb drivers using these character sets in conjunction with
SHIFT_JIS on PC platforms has now been completed and the prior limitation of use
of these characters sets has now been removed.
▲contents
5.26 Corrections in Release 7.2.5.2.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.5.2.x.
5.26.1 ResultSet.getBigDecimal() not Working with System ResultSets
Fixed in Instance Build 20070714 release 7.2.5.2.0.
Calling the getBigDecimal() methods on a column in a resultset returned by
DatabaseMetaData methods may fail with the following exception:
java.lang.ArrayIndexOutOfBoundsException: 2
114
This has now been fixed.
5.26.2 Setting TraceLevel fails when using Hexadecimal Notation
Fixed in Instance Build 20070731 release 7.2.5.2.0.
A problem in parsing hexadecimal values for trace level may cause an exception to be
raised when trace level values greater than 0x7FFFFFFF are used:
java.lang.NullPointerException
This has now been fixed.
5.26.3 Delimited Identifier Problem in AS clause of Select Statement
Fixed in Instance Build 20070731 release 7.2.5.2.0.
A problem introduced in release 7.2.5.1.0 in parsing delimited identifiers used in the
AS clause of a select statement may cause an exception to be raised:
select last_name as "name 1", first_name from employees
SQLException: in <rdbjdbcsrv:prepare_stmt>
%SQL-F-RELNOTDEF, Table FIRST_NAME is not defined in database
or schema:42000
A work-around is to not use delimited identifiers in the AS clause:
select last_name as name1, first_name from employees
This problem has now been fixed.
5.26.4 Configuration file problem in "DEFAULT" Server Definition
Fixed in Instance Build 20080122 release 7.2.5.2.0.
A problem in how properties were copied from the "DEFAULT" server definition
during the instantiation of server information may cause servers to have inappropriate
configuration settings.
115
This problem may only arise if the "DEFAULT" server definition in the server
configuration file contains any of the following properties:
ssl.default ssl.context
ssl.keyManagerFactory
ssl.keyStoreType
ssl.keyStore
ssl.keyStorePassword
ssl.trustStore
ssl.trustStorePassword
<allowPrivUser>
<allowUser>
<allowDatabase>
<allowPrivUser>
If any of the above properties are used in the "DEFAULT" server definition it is
possible that server configuration properties such as Allowed Databases, or Allowed
Users may be incorrectly propagated from the server they were specified for, to all
other servers described in the same configuration file.
A work around for this problem is to not use any of the above properties in the
"DEFAULT" server definition and instead place the property in each of the server
definitions that require it.
Note that the examples of configurations files used in the Oracle JDBC for Rdb
documentation may be susceptible to this problem as they do show the use of the
following property in the "DEFAULT" server definition:
ssl.default="true"
The problem has now been fixed.
5.26.5 Pool Server May choose Incompatible Pooled Server when User Restriction Enabled
Fixed in Instance Build 20080122 release 7.2.5.2.0.
If a server taking part in a pool of servers controlled by a Pool Server has restricted
access enabled and one or more AllowedUser entries are present for that server, the
Pool Server may choose the server as a possible candidate server for the connection
request, even if the connection username is not one of the specified AllowedUsers.
If this happens, the connection request will be redirected to that chosen server but the
connection attempt will be immediately terminated with the following exception:
SQLException: Access to server denied
116
Changes have now been made to ensure that information is passed correctly to the
Pool Server during the initial connection request to allow it to correctly determine if a
candidate pooled server will accept the user requesting the connection prior to
redirecting the connection request to that server.
5.26.6 Potential Problem when Dumping SQLDA in Trace
Fixed in Instance Build 20080125 release 7.2.5.2.0.
A problem in allocation of an internal buffer for the dumping of a SQLVAR data area
may cause unexpected and unusual problems during the execution of the server that
may result in the server terminating unexpectedly.
This problem may only be seen if the traceLevel DUMP SQLDA flag bit is set for the
connection or set server-wide and the data area of the SQLVAR being dump is
greater than 512 octets in length.
Bit Hexadecimal
Value
Decimal
Value
Traces
14 0x00004000 16384 Dump SQLDA information
A workaround for this problem is to not set the tracelevel DUMP SQLDA trace flag
bit.
This has now been fixed.
5.26.7 Connection.getCatalog() Returns Wrong Value for Single Schema Databases
Fixed in Instance Build 20080212 release 7.2.5.2.0.
The Connection.getCatalog() method incorrectly returns a single quote delimited
string instead of a NULL object when connected to a single schema database. When
used in conjunction with a multi-schema database the correct catalog value is
returned.
This problem prevents JDeveloper 10.x from correctly displaying table and views
within the Database branch in the Connections Navigator.
A similar problem may occur when using the Connection.getSchema() method.
117
5.26.8 Potential Memory Leak with Views
Fixed in Instance Build 20080227 release 7.2.5.2.0.
A problem in the handling of statement preparation for SQL statements that contain
views where the view result tuples cannot have a dbkey associated with them, caused
a memory leak in the Oracle JDBC for Rdb drivers and servers.
The problem may manifest itself in a number of ways including access violations and
exceptions stating that shared memory has been used up.
The following example shows a typical view that may cause this problem:
create view view1 (c1 integer, c2 integer) as select c1,c2 from t1
union select c3,c4 from t2;
Queries on this view will execute correctly, however during the internal preparation
of each query, memory may be allocated that may stay allocated until the connection
is closed. In addition the underlying SQL statement may not be released correctly,
which in turn may prevent metadata updates from being carried out on the referred
tables.
▲contents
5.27 New Features for Release 7.2.5.1.x
This chapter describes new and changed features in Oracle JDBC for Rdb release
7.2.5.1.x.
5.27.1 SQLDA Dumping
Release 7.2.5.1.0.
Setting the tracelevel to 0x00004000 (Decimal 16384) will provide information about
the SQLDA information passed to and from SQL.
See the Oracle JDBC for Rdb User Guide for details.
5.27.2 failSAFE IP with Pool Servers
Release 7.2.5.1.0.
Pool servers may be configured to ensure that redirected connection requests will still
correctly redirect during failSAFE IP fail over.
118
See the Oracle JDBC for Rdb User Guide for details.
5.27.3 HandshakeTries and HandshakeWait on Multi-process Native Connections
Release 7.2.5.1.0.
The multi-process option on native connections allows the use of executor sub-
processes to carryout Rdb connections on behalf of your application using the
RdbNative driver. You now have the capability of specifying handshake options
during the initial communication handshake protocol used by the main and associated
sub-processes.
See the Oracle JDBC for Rdb User Guide for details.
5.27.4 Server Access Security Enhancements
Release 7.2.5.1.0.
Servers may be configured to restrict the access of their served databases to a list of
allowed usernames. The server configuration allowUser has been added to the
server section of the configuration files restricting access to databases via that server
to only those users specified.
In addition a server password can be specified using the srv.password
configuration option which forces all users of that server to provide an addition
password before access via the server will be granted.
See the Oracle JDBC for Rdb User Guide for details.
5.27.5 Restriction on using Multiple Blob fields in Join now Removed
Release 7.2.5.1.0.
In previous releases of Oracle JDBC for Rdb the following limitation was specified:
Blobs will only be returned correctly from a SQL join statements for the first table
mentioned in the join set. For example, given the SQL statement:
Select ta.blob, tb.blob from table1 ta, table2 tb
where ta.name = tb.name
ta.blob will be returned correctly as it is from the first table referenced in the join
set. Trying to access tb.blob may result in the following SQL error:
119
%SQL-F-BADPREPARE, Cannot use DESCRIBE or EXECUTE on a statement
that is not prepared
This restriction has now been lifted, the Oracle JDBC for Rdb drivers now handle
blob fields from multiple tables within a single join statement.
However due to the nature of the parsing carried out by the Oracle JDBC for Rdb
drivers it is required that all blob columns referenced from the second and subsequent
tables in the join must be qualified using correlation names as shown in the above
example of select.
Failure to use a correlation name in conjunction with the blob column name may
result in SQL parsing errors when data is retrieved from the blob field as the drivers
do not have enough information to determine the correct table to access the blob data
from.
SQL-F-FLDNOTCRS, Column <blob col> was not found in the tables in
current scope
This limitation also means that the use of "*" in the select clause for a join across two
or more tables that include blob fields may also cause a similar SQL error.
▲contents
5.28 Corrections in Release 7.2.5.1.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.5.1.x.
5.28.1 Incorrect Row Number Returned after ResultSet.getLast() call
Fixed in Instance Build 20060906 release 7.2.5.1.0.
A problem in the determination of the current row number when using Scrolling
ResultSets caused the ResultSet.getRow() method to return an incorrect row number
after absolute positioning of cursor after the end of stream.
The problem is only in the Oracle JDBC for Rdb Native Driver and does not show up
in when using the Oracle JDBC for Rdb Thin driver.
The problem may be seen only after a call has been made to ResultSet.afterLast()
method followed by a call to ResultSet.last().
120
The call to ResultSet.afterLast() incorrectly sets an internal record counter to one
greater than the actual count .
The following is an example of this problem.
.
.
.
Statement s2 = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = s2.executeQuery("select * from employees");
rs.afterLast();
rs.last();
System.out.println("row number :" + rs.getRow());
System.out.println("employee_id :" + rs.getString(1));
rs.close();
s2.close();
.
.
.
May return the following information when used with the Employees table in the
PERSONNEL or MF_PERSONNEL databases provided as sample database in the
Oracle Rdb installation (the row number of the last record should be 100) :
row number :101
employee_id :00471
5.28.2 Pool Server Startup of Pooled Servers may fail When Persona is Used
Fixed in Instance Build 20061011 release 7.2.5.1.0.
A problem in the naming of the subordinate processes used to create a server process
during the automatic startup of servers by the Pool Server may cause the following
exception:
%RUN-F-CREPRC, process creation failed
-SYSTEM-F-DUPLNAM, duplicate name
The following related exception might also be seen during the attempted startup of
the pooled server process:
java.sql.SQLException: Unable to start process, status: 0x164 :
121
substatus -4
These problems may be seen only if PERSONA is used to change the server
authorization characteristics of the started servers.
5.28.3 Last Column in Select List may be Inaccessible in Some Queries
Fixed in Instance Build 20061124 release 7.2.5.1.0.
A problem in the handling of internal dbkey information may prevent the application
access to the last column in a select list. This problem only occurs if the select query
used cannot provide unique Dbkeys for the resultant tuples. Queries containing
derived tables or views from multiple tables may show this problem.
For example:
select c1.last_name from (select * from employees c where
c.employee_id='00170') c1
may fail to return the last_name correctly when the Resultset.GetString(String
columnName) method is used.
select c1.last_name, c1.first_name from (select * from employees c
where c.employee_id='00170') c1
may correctly return the last name but not the first name as the problem only affects
the last column in the outermost select list.
This problem was introduced in code changes made for release 7.1.3.0 of the Oracle
JDBC for Rdb drivers.
5.28.4 Abnormal Client Termination may Prevent Executor Re-use
Fixed in Instance Build 20061221 release 7.2.5.1.0.
If a client application using a MP Server terminates abnormally or the client socket is
lost, the associated database connection will be disconnected by the server however
due to an internal problem, the executor process associated with the terminated client
may remain present on the system in LEF state.
The handling of abnormal termination did not correctly terminate the executor
process, nor did it place the free executor back in the free list for re-use. This results
122
in orphaned executor processes that will remain on the system in LEF waiting state
but will never be re-used.
If the client abnormal terminations occur frequently, the number of inactive executor
processes will grow and may eventually cause system resource problems and
excessive swapping.
5.28.5 Decimal Column Problem with Native Driver
Fixed in Instance Build 20061221 release 7.2.5.1.0.
A problem in the nativeRdb driver caused Decimal columns to be returned
incorrectly. This problem only affects applications using the rdbNative driver.
The Decimal datatype may be used by SQL when scaled integers are returned after
manipulation by an internal function or aggregate operation, for example the
following query may return incorrect values when executed through the rdbNative
driver.
select distinct salary_amount from salary_history
Application using the rdbThin driver should not encounter this problem.
5.28.6 'EFN xx is not available' Message on Executor Startup
Changed in Instance Build 20070302 release 7.2.5.1.0.
In earlier versions of Oracle JDBC for Rdb, if the MP Server found that the common
event flag number it was using to start the handshake process with a newly created
executor, was not available after trying to obtain it for reasonable length of time, the
server would abort the client connection attempt with the following exception:
'EFN xx is not available'
In such a case the event flag used by the server was probably left set by a previous
attempt by the server to create an executor process but failed during the process
startup due to resource problems.
The server code has now been changed to correctly clean up its event flags usage if an
executor process fails to start up correctly. In addition the server now does not abort
when it finds the event flags already in use, but now assumes that as the amount of
time the event flag is unavailable is much longer than the amount of time it might
123
take the executor process to be created and executor image run-up, that the flag may
be reset and the current executor start-up may proceed.
5.28.7 Extraneous log message during Auto-restart check by Pool Server
Changed in Instance Build 20070306 release 7.2.5.1.0.
A problem in how the Pool Server checked the availability of its pooled servers when
carrying out AutoRestart checking meant that an extraneous CLIENT LOST message
would be logged by the pooled server every time it was checked. The following
message would be logged:
srv.DBActionHandler <idle> Connection to Client lost
This has now been fixed.
5.28.8 Logfile not Correctly set for Servers Started Using the Controller
Fixed in Instance Build 20070412 release 7.2.5.1.0.
The logfile used by the server to record trace message and other output may be set in
the server specification section of the configuration file used in conjunction with the
servers and the Controller.
A problem in how the logfile information was passed to the newly started server
process prevented the correct logfile specification to be used by the server when the
server was started using the Controller Start Server command.
This has now been fixed.
▲contents
5.29 New Features for Release 7.2.5.0.x
5.29.1 Persona
Release 7.2.5.0.0.
When a Thin or Pool server starts up, it automatically inherits the rights identifiers,
quotas, and authorization attributes of the process under which it was started. You
may now override this default behavior by specifying a persona to use on the startup
of the server. This persona will then be used by both the server and the underlying
124
OpenVMS operating system to determine the rights and authorities of the server
process and any executor processes that the server may start up.
This feature was introduced in release 7.1.4.0.0, but was omitted from the release
notes.
5.30 Corrections in Release 7.2.5.0.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.5.0.x.
5.30.1 Incorrect SQLSRV_JDBC_SERVER_STARTUP72 Installed with V7.2-41 Oracle JDBC for Rdb Kit
Fixed in Instance Build 20060505 release 7.2.5.0.0.
An incorrect version of the SQLSRV_JDBC_SERVER_STARTUP72.COM file was
inadvertently placed in the installation kit for Oracle JDBC for Rdb 7.2.4.1.0.
This version of the file does not set up the RDB$JDBC_SQSNAM_* logical name
properly and may cause problems when you try to use this file with SQL/Service Thin
server startup.
The following line of DCL command in this file is incorrect:
$ nam :='f$logical("RDB$JDBC_SQSNAM_''port'")
It should read:
$ nam = f$logical("RDB$JDBC_SQSNAM_''port'")
This has now been fixed.
5.30.2 Multi-process Server May Show Continuous DIO Activity Even When Idle
Fixed in Instance Build 20060505 release 7.2.5.0.0.
A problem with the way error and output channels are assigned during the creation of
the executor subprocess by a detached Multi-process server may cause the server
process to continually issue direct I/Os to the associated mailboxes. This can be seen
125
as a continuous rise in the "Direct I/O" count for that process even when the server is
idle.
Although this does not interfere with the correct functionality of the server, it could
incorrectly show up as activity on a quiet server.
A workaround is to start up the Multi-process server directly in a login session rather
than detached.
This has now been fixed.
5.30.3 Client idleTimeout Does Not Work for Prestarted and Reused Executors
Fixed in Instance Build 20060505 release 7.2.5.0.0.
The amount of time that a client connection may be idle can be limited by using the
cli.idleTimeout parameter for the Thin server.
However, the client idle timeout value set for the server will be ignored when a Multi-
process server is used with prestarted executors.
If the client gets a prestarted executor on connection, the client idle timeout for the
server does not get properly transferred to the client context and no timeout will be
issued.
Additionally even if an executor was not prestarted, if it is reused then a similar
problem will occur and the inactivity timer will not be set.
The client idle timeout set for a server is now correctly observed by prestarted and re-
used executors.
5.30.4 Syntax Error in Query Generated for DatabaseMetaData.getTables
Fixed in Instance Build 20060620 release 7.2.5.0.0.
The JDBC DatabaseMetaData.getTables() method allows the caller to obtain
information about the tables and views found in a connected database. When you call
this method, you can supply a list of table types to search for.
Currently the Oracle JDBC for Rdb drivers recognize the following types of tables for
this method:
● TABLE
● VIEW
126
● SYSTEM
● SYSTEM TABLE
● SYSTEM VIEW
● LOCAL TEMPORARY
● LOCAL TEMPORARY TABLE
● GLOBAL TEMPORARY
● GLOBAL TEMPORARY TABLE
● INFORMATION
● INFORMATION TABLE
The drivers should ignore any table type not in the above list.
However, due to a problem in the driver code, if the list of table types starts with a
type that is not recognized by the driver, a SQL syntax exception will be generated.
For example, the following example will result in a SQL syntax error:
String types[] = {DERIVED, "TABLE", "VIEW", "GLOBAL TEMPORARY"};
ResultSet rs = dbmd.getTables("","", "%" , types);
One possible workaround for this problem is to re-order the types so that the first type
specified is one from the list of recognized table types, for example:
String types[] = ("TABLE", DERIVED, "VIEW", "GLOBAL TEMPORARY"};
ResultSet rs = dbmd.getTables("","", "%" , types);
This example does not generate a SQL error.
This problem has now been fixed.
5.30.5 Show Clients in Controller may Crash Connected Thin Server
Fixed in Instance Build 20060620 release 7.2.5.0.0.
A change in handshake protocol in Oracle JDBC for Rdb 7.1.4.1.0 (V7.1-41) drivers
introduced a problem in how thin servers respond to requests for client information.
Issuing a SHOW CLIENT command in the Oracle JDBC for Rdb Controller
command line may cause the connected thin server to access violate and consequently
terminate the server process.
This problem has now been fixed.
▲contents
127
5.31 New Features for Release 7.2.4.1.x
This section contains new features and technical changes for Oracle JDBC for Rdb
release 7.2.4.1.x.
5.31.1 Client and Server Timeout Feature
Release 7.2.4.1.0.
You can now specify the amount of time a server or a client connection may remain
inactive before the connection will be terminated or the server closed down.
See the Oracle JDBC for Rdb User Guide for details.
5.31.2 Executor Name Prefix
Release 7.2.4.1.0.
You can now specify the name prefix for executors started up by the Multi-process
server. This can help in identifying executor processes on your system.
See the Oracle JDBC for Rdb User Guide for details.
▲contents
5.32 Corrections in Release 7.2.4.1.x
This section describes software errors corrected in Oracle JDBC for Rdb release
7.2.4.1.x.
5.32.1 Release Notes Specify Incorrect Installation Directory for RDBJDBCCFG.XML
Fixed in Instance Build 20060130 release 7.2.4.1.0.
The release notes for Oracle JDBC for Rdb release 7.1.2.0.0 incorrectly specified that
the RDBJDBCCFG.XML file would be copied to SYS$COMMON:[RDB$JDBC]
directory. The RDBJDBCCFG.XML is actually coped to two directories during
product installation:
● The product installation directory found under the main JDBC directory, for
example,
SYS$COMMON:[RDB$JDBC.0701-4V0614]
128
● The SYS$COMMON:[RDB$JDBC.COM] directory
In addition, the installation procedure incorrectly replaced the RDBJDBCCFG.XML
file in the SYS$COMMON:[RDB$JDBC.COM] directory, overwriting any already
existing file of the same name.
The release notes have been fixed, and the installation procedure will only copy the
RDBJDBCCFG.XML file to the SYS$COMMON:[RDB$JDBC.COM] directory if
the file does not already exist in that directory.
5.32.2 Persona Not Handled Correctly by the Multi-process and Pool Servers
Fixed in Instance Build 20060130 release 7.2.4.1.0.
When the Persona feature is used in conjunction with a Multi-process or Pool server,
a problem in the way either the executor processes or the pooled server processes are
created prevented the correct Persona identification from being passed to the created
processes. This problem may result in the following error being raised:
java.io.IOException: Child creation error: not owner
Due to a restriction in the use of the Java System.exec() method that was used by the
JDBC servers to start executor sub-processes and pooled servers, the security
information and Persona details were not copied across to the newly created process.
The JDBC servers now use the OpenVMS system service CREPRC to start processes.
CREPRC correctly transfers the security information to the new process.
5.32.3 Multi-process Server / Executor Handshake Timeout May Be Too Short on Heavily Loaded Systems
Fixed in Instance Build 20060130 release 7.2.4.1.0.
When a Multi-process server talks to an executor it uses a handshake protocol to
check that the executor is still alive and accepting direction. By default, if the
executor has not responded to the server's synchronization request within five seconds
it will raise the following exception and terminate the connection :
Lost connection to executor
129
This synchronization handshake is done after the executor has replied to the server
that it has completed the task requested and is waiting for the next operation to carry
out. This synchronization failure will not be raised while the executor is busy within
the database and thus is unaffected by such things as database locks or the duration
required to compile or execute queries. It will only occur when the executor is known
to be waiting for the next action to carry out.
In heavily loaded systems, especially on single-cpu systems, it is possible that the
executor process may not be scheduled for execution within the window of this
synchronization handshake and the exception may be raised.
In order to carry out this synchronization, in previous version of the drivers the server
polls the executor up to 500 times with a 10 millisecond delay between each poll
request. If no response is found after 500 tries, the server raises the above exception.
This version of the Oracle JDBC for Rdb drivers now allows you to specify, at the
server level, the maximum number of poll tries and the delay between each try. If you
know that the system on which the server is executing could possibly have extended
process scheduling delays, you can ensure that the server will not time out on the
synchronization handshake. Two new switches have been added to the server
definition and startup.
● Srv.MPmaxTries---Use to specify the maximum number of poll tries
● Srv.MPtryWait---Use to specify the delay between each try
See the Oracle JDBC for Rdb User Guide for more information.
5.32.4 Problems with srv.idleTimeout and srv.bindTimout Configuration Variables and Their Use with SSL servers
Fixed in Instance Build 20060208 release 7.2.4.1.0.
The Oracle JDBC for Rdb User Guide for release 7.1.3.0.0 (V7.1-3) incorrectly
referred to the srv.idleTimeout as affecting the inactivity timeout for a connection.
This switch actually refers to the timeout period for server inactivity. In addition, this
feature was not fully functional in previous versions.
The srv.bindTimeout configuration variable was meant to limit the time the server
will wait for an acknowledgement from the client that the database attach should
proceed. The default value is 0, which means that the server will wait indefinitely.
This timeout is useful when dealing with SSL communication, as the server uses it to
limit the time it will wait for the client to send down an attach request after a new
socket connection has been requested. If the client fails to use an SSL secure socket
when trying to communicate with a server that has SSL enabled, the client thread
130
within the server will hang as the connection cannot complete. The srv.bindTimeout
value specifies how long this wait should be before giving up.
Unfortunately the default for the value was incorrectly set to 1 second, and the
srv.bindTimeout server attribute was ignored in the XML configuration file. This
meant that on CPU-bound systems it was possible that the initial SSL negotiation
could take longer than one second and thus cause a TIMOUT failure on the new
connection request.
These problems have now been fixed. See the Oracle JDBC for Rdb User Guide for
more information.
5.32.5 IA64 Problem Causes Array Out of Bounds Exception When Handling String Indexing
Fixed in Instance Build 20060208 release 7.2.4.1.0.
A problem in the way Java on IA64 carries out string index operations in association
with static final string constants may infrequently cause the following type of
exception to be raised:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1054649176 at
java.lang.String.indexOf(String.java:1266) at
java.lang.String.indexOf(String.java:1236) at
java.lang.String.indexOf(String.java:1218) at
oracle.rdb.jdbc.common.Statement.getTableName(Statement.java:3148)
In all cases, the index value shown after the exception name is very large, in the same
order of magnitude as seen above.
The getTableName method has now been changed to a mechanism other than indexOf
to carry out its operation. This problem should no longer be seen.
5.32.6 Comments within SQL Text Not Handled Correctly
Fixed in Instance Build 20060301 release 7.2.4.1.0.
Executing or preparing a statement that has SQL text containing leading or embedded
comments may cause errors during parsing of the statement.
Some third-party products may use comments such as /* comment */ in the text they
send down to the JDBC drivers for compilation. Although handled correctly by
Oracle Rdb, comments of this style caused a problem in the determination of
statement types during the preliminary parsing of the statement by the JDBC driver.
131
For example the following SQL text:
stmt.Execute(/* This is a comment */ select * from jobs);
would cause an SQLException:
SQLException: in <rdbjdbcsrv:execute_immediate> %SQL-F-EXESELSTA,
Attempted to EXECUTE a SELECT statement:RR000
The JDBC driver could not correctly determine the type of statement and used the
wrong underlying SQL operation to attempt to execute it.
The drivers now extract out comments prior to determining the statement type and
sending the native SQL down to Oracle Rdb. The drivers will now correctly parse out
C and SQL type comments, for example:
/* comment */
! this comment will be terminated at the next line break
-- this comment will be terminated at the next line break
// this comment will be terminated at the next line break
5.32.7 Prepared Statements May Cause a Memory Leak with Multi-process Servers
Fixed in Instance Build 20060301 release 7.2.4.1.0.
During the preparation of PreparedStatements, the Multi-process server has to
allocate memory from the servers' global shared memory pool that will hold some
information about columns and parameter markers in the statement that is being
prepared.
Due to a coding problem, some of this memory was incorrectly allocated each time
the prepared statement was executed, instead of only once at statement compilation
time. This wrongly allocated memory was never freed after use. Executing the same
prepared statement multiple times will slowly diminish the shared memory available
to the server, eventually causing a problem when the shared memory allocation is all
used up.
This has now been fixed.
▲contents
132
5.33 Corrections in Release 7.2.4.0.x
This section describes software errors corrected in Oracle JDBC for Rdb 7.2.4.0.x.
5.33.1 Maximum Size of Single Data Row Increased to 65,272 Octets
Fixed in Instance Build 20051114 release 7.2.4.0.0.
During copying rows of data from Oracle Rdb, the Oracle JDBC for Rdb drivers
incorrectly limited the number of octets copied to 36863 octets. This can cause
problems when there are more than 36863 octets in the row.
The following exception is a symptom of this data row truncation:
Statement creation failed: java.sql.SQLException: Connection lost :
java.lang.NegativeArraySizeException @rdb.Client.fillCache
The maximum size of a data row supported by the drivers has now been increased to
65,272 octets in keeping with the maximum row size supported by Oracle Rdb.
5.33.2 Another Connection Overlap Window Found with Pool Servers
Fixed in Instance Build 20051209 release 7.2.4.0.0.
Another potential overlap of connections between the connection made by the Oracle
JDBC for Rdb Pool server and its pooled servers has been found which may cause the
incorrect rejection of a client connection even when a free connection slot is
available.
This is similar to the problem referred to in the Oracle JDBC for Rdb 7.1.3.3.0 release
notes as Spurious Maximum Number of Clients Exceeded Exception.
The handshake protocol during server check by the Pool server has now been
changed to prevent this overlap of connections.
5.33.3 SSL Server Information Not Correctly Set from XML-Formatted Configuration File
Fixed in Instance Build 20051220 release 7.2.4.0.0.
A problem in the parsing of XML configuration file data prevented the correct port
and node information from being assigned to named servers of the type
"RdbThinSrvSSL", "RdbThinSrvMPSSL" and "RdbThinSrvPoolSSL.
133
Any URL specification provided for the individual server would be ignored, and the
default port and node used instead.
This has now been fixed.
▲contents