Dropping stored procedures: During testing, intermittent failures have been observed when dropping stored procedures with SQL error SQL0658N. This has been identified as a problem in the DB2 CLI client. (SP-12316 / IBM IC73906)
Setting the maximum number of connections: Setting the maximum number of connections was deprecated in DB2 8.1 by IBM. Please see IBM's DB2 APAR JR18223 (SP-9012).
Support for transaction savepoints: Support for transaction savepoints is implemented using Transact-SQL statements, as the ODBC API has no methods to support savepoints. In the Microsoft ODBC SQL Server documentation for SQL Server version 6.5, this is the recommended method for implementing savepoints. However, the SQL Server 7.0 and SQL Server 2000 documentation states that the use of Transact-SQL statements may cause undetermined behavior in the driver. During testing, no undetermined behavior has been detected.
RWDBDatabase and multithreaded applications: In multithreaded applications, producing RWDBDatabase objects using an RWDBManager::database() call in each thread simultaneously results in a segmentation fault. This is due to a MySQL native call that is not multithread safe.
To work around this problem, serialize the production of the first RWDBDatabase object. Alternatively, call MySQL native API mysql_server_init() (mysql_library_init() for MySQL 5.x) before accessing the DB Access Module for MySQL. (SP-8553)
DB2 Driver Configuration
On UNIX platforms, with the unixODBC 2.3.0 driver manager and the DB2 9.7 client (FixPack 4 on Linux platforms, FixPack 2 on others):
The following odbcinst.ini options were used with the DB2 ODBC driver:
DontDLClose = 1 FileUsage = 1 Threading = 0 |
The threading option may address possible SIGABT crashes that have been observed in multithreaded ODBC applications.
The following db2cli.ini options were used with the DB2 ODBC driver:
LongDataCompat=1 MapGraphicDescribe=2 |
Microsoft SQL Server
This driver ignores the database argument passed to the RWDBManager's database() function. Instead, the database associated with the RWDBDatabase object returned by the database() function is the default database of the user.
HP-UX Itanium and multithreaded builds: Multithreaded builds of the DB Access Module for PostgreSQL on HP Itanium must be built using a thread-enabled PostgreSQL client, which can be built from PostgreSQL source using the configure option --enable-thread-safety. (SP-12322)
Binding 8-byte long and unsigned long Data: The Sybase Client-Library CS_INT data type is strictly 4 bytes, even on 64-bit platforms. Binding a long or unsigned long on a platform with an 8-byte long results in data truncation. Use the int data type instead.
Cursor Limitation: This library has problems handling decimal columns with NULL values through cursors. On some platforms, deleting a row with null values in decimal columns through a cursor causes a core dump. In some platforms, it returns non-null values for NULL columns. Sybase has identified this as a bug. (Sybase #94310 / SP-7765)
Multithreaded Asynchronous Limitation: During testing for Linux, it was found that calling ct_poll() (the Client-Library function used to check the completion of an asynchronous operation) would cause a crash if called simultaneously from multiple threads on this platform. To prevent this, calls to ct_poll() are synchronized; no more than one call to ct_poll() can be active from SourcePro DB at a time.
Serialization of ct_poll() can, however, cause unwanted performance side effects if you are using asynchronous connections from your multithreaded program. If you are writing multithreaded code that also uses asynchronous connections from more than one thread, there is no workaround; you must incur this performance burden. If, however, you are writing multithreaded code using asynchronous connections, and the asynchronous connection usage is isolated to one thread only, you can safely turn off ct_poll() synchronization.
To turn off this synchronization, remove the -DRWDBCT_POLL_MUTEX from the generated product makefile in your workspace's source/sybasect/<build_type> directory, and run "make clean; make" in that directory to fully rebuild the Access Module with the new makefile. The removal of that macro will cause ct_poll() to be called without first checking if another thread is calling it.
RWDBOSql limitation for RWCString data: If a user attempts to bind RWCString data having length greater than 16384 bytes into a column of type TEXT, the data gets truncated to 16384 bytes. This is due to the page-size limitation in Sybase.
A workaround is to insert the data as a literal rather than a placeholder. All DB Data Manipulation Classes will put RWCString data greater than 16384 bytes as literal in the SQL sent for execution. However, while using class RWDBOSql, the user must perform this before passing the statement to the RWDBOSql instance. (Sybase case #10832821 / SP-7789)
The DB Access Module for Sybase supports bulk writing through the array interface provided by the Sybase Bulk-Library function blk_bind(), which is part of the Open Client and Open Server common libraries. However, Sybase Bulk-Library does not support insertion with column-list. Here are some other specifics on using bulk insertion with SourcePro DB and Sybase:
The RWDBBulkInserter associated with the DB Access Module for Sybase can accept RWDBTBuffer<RWDBBlob> with elements up to 64K in width. Elements of width greater than 64K may corrupt the database.
Bulk insertion is implemented based on the Sybase Bulk-Library, which may impact the recoverability of the database in case of failures. See the Sybase documentation on "Bulk-Library client programming" for full details.
The Sybase Bulk-Library call blk_bind() doesn't report errors when NULLS are inserted into a column that doesn't accept NULL values.
Sybase does not allow bulk insertions in tables storing data that can expand in size from client to server, when LONGCHAR capability is enabled. The following error is reported: "BCP insert operation is disabled when LONGCHAR capability is turned on and data size is changing between client and server character sets since BCP does not support LONGCHAR yet." This is a Sybase limitation. (Sybase Case# 10829253, Sybase CR# 287247 )
Some workarounds for this problem are:
Set the client character set the same as the server character set. This prevents any data conversions between client and server. See the Internationalization and Localization section in the DB Access Module for Sybase User's Guide for changing client locale settings.
Turn character set conversion between client and server off. Refer to the Sybase ASE System Administration Guide for ways to turn the character set conversion off.
IBM/AIX
Executables using the Sybase Access Module multithreaded dynamic builds on the AIX operating system have been observed to produce intermittent SIGILL crashes, if not linked with Sybase vendor libraries. To work around this issue, Sybase vendor libraries or the Sybase Access Module library can be linked to the executable. The Sybase Access Module examples link the Sybase Access Module library. As these failures are intermittent, if you do not observe them, you do not need to link these libraries to your executables. (SP-10044)
Solaris
Executables using Sybase Access Module multithreaded dynamic builds on Solaris operating systems have been observed to produce intermittent segmentation faults if not linked with Sybase vendor libraries. To workaround this issue, Sybase vendor libraries or thSybase Access Module library can be linked to the executable. The Sybase Access Module examples link the Sybase Access Module library. As these failures are intermittent, if you do not observe these failures, you do not need to link these libraries to your executables. (SP-9472)
SuSE Linux Enterprise Server 11 SP1
Executables using Sybase Access Module multithreaded dynamic libraries on SuSE Linux Enterprise Server need to link the Sybase vendor libraries. Not linking the Sybase vendor libraries to the executable has been observed to produce intermittent segmentation faults. The Sybase vendor libraries can be linked directly or by linking the Sybase Access Module library to the executable. The Sybase Access module examples link the Sybase Access Module library.
As these failures are intermittent, if you do not observe these failures, you do not need to link these libraries to your executables. (SP-8505/RW# 32062)
Red Hat Enterprise Linux 5
Executables using Sybase Access Module multithreaded dynamic libraries on Red Hat Enterprise Linux 5 need to link the Sybase vendor libraries. Not linking the Sybase vendor libraries to the executable has been observed to produce intermittent segmentation faults. The Sybase vendor libraries can be linked directly or by linking the Sybase Access Module library to the executable. The Sybase Access Module examples link the Sybase Access Module library. As these failures are intermittent, if you do not observe these failures, you do not need to link these libraries to your executables. (SP-9426)
Oracle Heterogeneous Services: When using Oracle Heterogeneous Services for SQL execution, you need to use explicit Transaction Management using beginTransaction() and commitTransaction(). By default, this module uses OCI_COMMIT_ON_SUCCESS, whereas heterogeneous services require transactions.
Oracle and LONG columns: When a result set fetched from Oracle has a LONG column in it and no buffer is bound for the LONG column, then Oracle returns either "ORA-03106: fatal two-task communication protocol" or "ORA-00127 dispatcher %s does not exist." (Oracle bug #4919068 / SP-8671)
Breaking out of polling operations with OCIBreak: Calling OCIBreak to terminate polling operations doesn't work. This results in ORA-03127 when the next operation is attempted on the connection. OCIBreak is called when:
Reading into a RWDBTBuffer<char> when the buffer is not large enough to hold the data.
Returning false or throwing an exception from RWDBDataCallback::onFetch().
This has been identified as Oracle bug #10606993.
Using SYS.XMLTYPE datatype: The Oracle datatypes SYS.XMLTYPE is supported by SourcePro DB, but extra steps are required in some cases. When inserting data using RWDBInserter, to use the best transfer mechanism the DB Interface Module needs to know that the underlying table has a SYS.XMLTYPE column. The easiest way to do this is by calling the RWDBTable's fetchSchema() method before creating your RWDBInserter instance.
Here's an example that demonstrates this:
// CREATE TABLE foo(c NUMBER(9), xmlcol SYS.XMLTYPE); RWDBTable foo = myDb.table("foo"); foo.fetchSchema(myConn); RWDBInserter ins = foo.inserter(); int c; RWCString xml; // fill in data ... ins << c << xml; ins.execute(myConn); ... |
HP-UX ITANIUM
Applications using the Oracle Access Module on HPUX 11i v3 crash with a bus error if the first connection established by the application is inside a child thread. Increasing the thread stack size using thread_attr_setstacksize() resolves the issue (SP-9006).
Applications using Oracle Access Module on HPUX 11i v3 intermittently crash with a segmentation fault when executing OCIEnvCreate. This occurs when using the Oracle 11.2.0.1 32-bit Client library. Oracle issue 9808368 discusses this problem and potential resolutions. (SP-12341)
Red Hat Enterprise Linux, Intel C++ Compilers
Using the Intel C++ compiler may result in unresolved symbols errors. Supplying the path to the lib subdirectory of the compiler installation as the first path for the linker to search for libraries (for example: -L<path to compiler>/lib) resolves the errors. (SP-8484)
In addition, the path to the Intel libraries should also appear before the path to the Oracle libraries in the LD_LIBRARY_PATH environment variable. (SP-8585)
Copyright © Rogue Wave Software, Inc. All Rights Reserved.
The Rogue Wave name and logo, and SourcePro, are registered trademarks of Rogue Wave Software. All other trademarks are the property of their respective owners.
Provide feedback to Rogue Wave about its documentation.