Re: Oracle Data Provider Issue
- From: "Frans Bouma [C# MVP]" <perseus.usenetNOSPAM@xxxxxxxxx>
- Date: Fri, 21 Dec 2007 01:03:06 -0800
benjo wrote:
On 19 Dic, 20:29, "Nicholas Paldino [.NET/C# MVP]"
<m...@xxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
Somehow, I doubt that it is the noop that is causing your
problems. Rather, I think that it might be a problem with the
client, or in how you are using it.
I also think that is not possible that the nop is the blocking, but
what I have posted is that the debug shows me.
Can you show some more details? Like the section of code that
you got this disassembly from? The connection string? What
version of the Oracle client do you have running on that machine?
Oracle client SQL*Plus: Release 10.2.0.1.0
Oracle.DataAccess Assmbly version 2.102.2.20
_connectionString = "User Id=mk;Password=mk;Data
Source=rtdbmk;Pooling=False"
[CODE - 1]
String whereCond = "MODEL_ID = " +
((Int32)modelId).ToString() +
" AND PARAMETER_TYPE = " + parameterType.ToString();
if (stripID != String.Empty)
whereCond += " AND STRIP_ID = '" + stripID + "'";
String sql = "SELECT DIMENSION, PARAMETER FROM MODEL_HIST
WHERE " + whereCond +
" AND ACTIVATION_TIME = " +
"(SELECT MAX(ACTIVATION_TIME) FROM MODEL_HIST WHERE "
+ whereCond + " ) ORDER BY MSEC DESC";
DataTable dt = new DataTable();
OracleDataAdapter oda =
new OracleDataAdapter(sql, conn);
oda.Fill(dt);------------------> this is the C# statement
whose disassembly I posted yesterday
dimension = Convert.ToInt32(dt.Rows[0]["DIMENSION"]);
return (dt.Rows.Count == 0) ? null : (Byte[])dt.Rows[0]
["PARAMETER"];
[\CODE - 1]
PARAMETER attribute is type of B.L.O.B. and contains an object
serialized in XML format and then compressed in GZip
The really strange thing is that there is 9 applications of the same
kind but only 2 show the problem. They all retrieve data from database
from different tables, but all retrieve from MODEL_HIST table some
BLOBs (containing different objects).
During the 3 last blocked execution i noticed that the problem happens
when retrieving an array of Double, but before that the applications
get successfully from the same table other arrays or more complex
object.
[CODE - 2]
Object objBlob = new PreSetData();
String retMsg = MkDBHelper.RetrieveModelData(oraConnRTDB,
ModelIds.RollingSetup, 1, awakeParameters.StripId, ref objBlob);
preSet = (PreSetData)objBlob;
objBlob = new Double[10];
retMsg = MkDBHelper.RetrieveModelData(oraConnRTDB,
ModelIds.RollingAdapt, 3, awakeParameters.StripId, ref objBlob);
stripYoungMod = (Double[])objBlob;
WriteLog("Reading yield stress from previous Rolling Adaptation",
true, false);
objBlob = new Double[10];
retMsg = MkDBHelper.RetrieveModelData(oraConnRTDB,
ModelIds.RollingAdapt, 3, awakeParameters.StripId, ref objBlob);
yieldStress = (Double[])objBlob;
[\CODE - 2]
[CODE - 1] implements MkDBHelper.RetrieveModelData()
These lines [CODE - 2] are executed one time every activation, which
happens every 2 minutes, and apparently random, some times, the
execution stay blocked in MkDBHelper.RetrieveModelData(). Stepping in
during debug I find that the blocking statement is "oda.Fill(dt)"
--
- Nicholas Paldino [.NET/C# MVP]
- m...@xxxxxxxxxxxxxxxxxxxxxxxxxxx
"benjo" <filo.c...@xxxxxxxxx> wrote in message
news:54c9a77d-db19-4beb-8660-c525af53cf27@xxxxxxxxxxxxxxxxxxxxxxxxxx
om...
Hi all,
I have developed an application which strongly access an Oracle
10g DB. The application has to be running for days but i got this
problem.
The code execution stay blocked in one of these three statements:
oraConnection.Open();
oraConnection.Close();
oda.Fill(dt); (where oda is an instance of OracleDataAccess an dt
an instance od DataTable class)
The really strange thing is that these lines are succesfully
executed a lot of time but in some case (about 1 time every 6
hours or in some case 1 time every 24 hour, the frequency is not
really fixed) the execution of one of the above statements never
ends. For instance in case of Close() the connection from Oracle
side has already closed (I have verified with appropriate query
on session) but the execution of the C# statement is still living
and not returning. In case of oda.Fill(dt), I have just found
that, the execution as i can see now (19-Dec-07 10:20:00) from
disassembly is blocked in the statement "nop" since 18-Dec-07
22:49:00 oda.Fill(dt);
0000016a mov edx,ebx
0000016c mov ecx,dword ptr [esp+14h]
00000170 cmp dword ptr [ecx],ecx
00000172 call 60F68188
00000177 nop ------------THIS IS THE BLOCKING STATEMENT
hope someone can help me, i'm really in trouble :S
Switch ON connection pooling. Pooling should only be switched off with
single-threaded desktop applications.
FB
--
------------------------------------------------------------------------
Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
LLBLGen Pro website: http://www.llblgen.com
My .NET blog: http://weblogs.asp.net/fbouma
Microsoft MVP (C#)
------------------------------------------------------------------------
.
- References:
- Oracle Data Provider Issue
- From: benjo
- Re: Oracle Data Provider Issue
- From: Frans Bouma [C# MVP]
- Re: Oracle Data Provider Issue
- From: benjo
- Oracle Data Provider Issue
- Prev by Date: Re: Webcam Capture
- Next by Date: binding source poisiton event executed too many times
- Previous by thread: Re: Oracle Data Provider Issue
- Next by thread: DataSet and thread
- Index(es):
Relevant Pages
|