ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Merant Oracle ODBC Driver

Post new topic  Reply to topic
 Merant Oracle ODBC Driver « View previous topic :: View next topic » 
Author Message
pmbsa
PostPosted: Wed Dec 12, 2001 5:39 am    Post subject: Reply with quote

Novice

Joined: 06 Aug 2001
Posts: 16

Hi, has anybody has problems storing large
messages into Oracle (When I say large I only mean in and around 10K)

When we try to store these large messages the Broker hangs the last thing the trace says is that MQSI is about to store the message.

There is no activity within Oracle, this would lead me to believe that there is an issue with the Merant ODBC driver.

any input to this would be much appreciated

thanks
Paul
Back to top
View user's profile Send private message
mpuetz
PostPosted: Mon Dec 17, 2001 4:46 am    Post subject: Reply with quote

Centurion

Joined: 05 Jul 2001
Posts: 149
Location: IBM/Central WebSphere Services

Hi,

we have encountered a similar problem
with 2.0.2 HPUX Version against
Oracle 8.1.6 and 8.1.7.

We have nailed it down to be (most likely)
a bug in the Merant ODBC driver which
'magically' inserts a zero byte after
the first 1000 bytes of any SQL parameters.
This PMR is still open and I will post here
if we have gotten a fix from software support.

Mathias Puetz,

IBM-EMEA AIM Services
MQ/MQSI Specialist
Back to top
View user's profile Send private message
surenat
PostPosted: Wed Jan 02, 2002 4:57 pm    Post subject: Reply with quote

Apprentice

Joined: 01 Jan 2002
Posts: 32


This is a known limitation. Here is a summary explanation :
.
An internal MQSI feature 18003 was opened to describe the problem
where, due to limitations in the native Oracle NT ODBC drivers and the
Merant Oracle ODBC driver, which cause all columns to be described as
VARCHAR(999) when SQLDescribeParam() is called.
.
The most serious known problem this causes is to restrict the size of
a BLOB and CLOB insert to a maximum of 4K.
.
Due to the variations between the datatypes and the sequence the
messages are processed in, the error message will vary. However, the
most likely error message would be a :
Database error: SQL State 'HY104';
Native Error Code '0';
Error Text '[MERANT][ODBC Oracle 8 driver]Invalid precision value
.
To explain this further, MQSI makes a connection to a user database
the first time a messageflow is exercised that contains a datasource.
This connection is then cached and so each subsequent message that is
P
processed will use the values as set by the first message being
processed. In this scenario, we bind the parameters using the ODBC
function SQLBindParameter, and we pass a length of 999 and a datatype

of VARCHAR2 (for the BLOB or CLOB column) and the driver and Oracle
conspire to do the correct conversion from the output data format to
VARCHAR2, followed by another conversion to the real target datatype.
So, as in this case, initial messages with data of a length between
0 and 4K will be processed fine, but any subsequent messages larger
than 4K will fail with an "Invalid precision" type error.
.
This is consistant with what the customer is seeing.
.
This feature is still "open" and there is no resolution to the problem
as yet.
.
A very LIMITED workaround has been developed for this problem, but is
ONLY suitable in situations where BLOBs *OR* CLOBs are used, but not
where both where BLOBs *AND* CLOBs are used. This uses the environment
variable MQSI_ORACLE_LOB_TYPE.

.
This customer is running with MQSIv2.0.1 CSD03 where the environment
variable MQSI_ORACLE_LOB_TYPE is included but undocumented.
.
Environment variable MQSI_ORACLE_LOB_TYPE can be set to either BLOB
or CLOB. This is case sensitive and must be upper case.
.
The following matrix details the maximum length restrictions for data
being inserted into BLOB, CLOB and VARCHAR2 Oracle column datatypes
dependent on the setting of the environment variable:
.
MQSI_ORACLE_LOB_TYPE not set
.
- BLOB, max length = 1998
- CLOB, max length = 3998
- VARCHAR2, max length = 4000

.
MQSI_ORACLE_LOB_TYPE set to BLOB
.
- BLOB, max length as defined by DBMS datatype BLOB (tested to 16000)
- CLOB, max length = 998
- VARCHAR2, max length = 998
.
MQSI_ORACLE_LOB_TYPE set to CLOB
.
- BLOB, max length 498 (hexadecimal string 998)
- CLOB, max length as defined by DBMS datatype CLOB (tested to 16000)
- VARCHAR2, max length = 998
.
There will be some performance degredation if the environment variable
is used, because an SQLPrepare statement is performed for EVERY insert
statement that is executed.

.
To apply this environment variable :
.
- Stop all MQSI brokers using the mqsistop command.
- Set and export the environment variable MQSI_ORACLE_LOB_TYPE to
either BLOB or CLOB.
- Restart the MQSI brokers using the mqsistart command.
.

#####################

Thanks

Suresh Nathani


Quote:

On 2001-12-17 04:46, mpuetz wrote:
Hi,

we have encountered a similar problem
with 2.0.2 HPUX Version against
Oracle 8.1.6 and 8.1.7.

We have nailed it down to be (most likely)
a bug in the Merant ODBC driver which
'magically' inserts a zero byte after
the first 1000 bytes of any SQL parameters.
This PMR is still open and I will post here
if we have gotten a fix from software support.

Mathias Puetz,

IBM-EMEA AIM Services
MQ/MQSI Specialist



[ This Message was edited by: surenat on 2002-01-02 16:59 ]
Back to top
View user's profile Send private message Send e-mail Yahoo Messenger
pmbsa
PostPosted: Thu Jan 03, 2002 2:33 am    Post subject: Reply with quote

Novice

Joined: 06 Aug 2001
Posts: 16

Thanks Guys, We have just been given the workaround and it appears to work (What a shock)

IBM seems all to un interested in a permenant fix for this though for my liking!!!

Paul
Back to top
View user's profile Send private message
mpuetz
PostPosted: Mon Jan 07, 2002 9:05 am    Post subject: Reply with quote

Centurion

Joined: 05 Jul 2001
Posts: 149
Location: IBM/Central WebSphere Services

Hi Suresh,

thanks for your info, although I'm not
yet sure whether this exactly applies to
the problems we are seeing.

We use 2.0.2 with fixpack 2 /Merant 3.7 and we are getting
the error with 1k string inserted into
a VARCHAR2(2000) without any environment
variables set like you described. So I would
assume inserts should go fine for strings
less than 4000 bytes in size. On our HPUX
platform it looks more like the default is
BLOB or CLOB mode since can't insert anything
(first message or no) larger than 1000 bytes.

By the way error message we get looks
like this
Dec 19 19:01:25 bypdpd MQSIv202: (PDPORTAL_MAIN.OPX2)[10]BIP2322E: Database error: SQL State '32'; Native Error Code '0'; Error Text '[MERANT][ODBC 20101 driver]1816044'

unlike the one you described.


_________________
Mathias Puetz

IBM/Central WebSphere Services
WebSphere Business Integration Specialist
Back to top
View user's profile Send private message
johndins
PostPosted: Thu Jun 10, 2004 4:54 am    Post subject: Reply with quote

Newbie

Joined: 02 Jun 2004
Posts: 3

Hi Guys

How do you go about setting the environment variable
is it programmatical in the flow
i.e. Environment.Variable.MQSI_ORACLE_LOB_TYPE = 'CLOB';
?
or is it
a regedit setting for MQSERIES ?

Thks
Back to top
View user's profile Send private message Send e-mail
kirani
PostPosted: Thu Jun 10, 2004 10:44 am    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

You cannot set system/user environment variables using ESQL code. You need to set it outside and use some plug-in node to read the variable.
_________________
Kiran


IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries

Back to top
View user's profile Send private message Visit poster's website
jefflowrey
PostPosted: Thu Jun 10, 2004 11:35 am    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

Actually, in this case, he doesn't need a plug-in node, as it's the ODBC driver that will be reading the value of the Environment variable.

But, yes, this appears to be a OS level Environment variable rather than a child member of the Environment message tree.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
johndins
PostPosted: Fri Jun 11, 2004 1:06 am    Post subject: Reply with quote

Newbie

Joined: 02 Jun 2004
Posts: 3

Guys

I tried adding a user variable and a system variable on the MQ SERIES SERVER system property environment variables.
I also tried add an entry in the odbc.ini registry setting. However none of this worked.

What does 'Set and Export the environment variable MQSI_ORACLE_LOB_TYPE to CLOB' mean ?

what actions do you have to do ?
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Merant Oracle ODBC Driver
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.