Re: Oracle Data Provider Issue
- From: benjo <filo.col8@xxxxxxxxx>
- Date: Thu, 20 Dec 2007 03:41:20 -0800 (PST)
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@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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
bye
benjo
.
- Follow-Ups:
- Re: Oracle Data Provider Issue
- From: Frans Bouma [C# MVP]
- Re: Oracle Data Provider Issue
- References:
- Oracle Data Provider Issue
- From: benjo
- Re: Oracle Data Provider Issue
- From: Frans Bouma [C# MVP]
- Oracle Data Provider Issue
- Prev by Date: Re: Oracle Data Provider Issue
- Next by Date: perfomance issues of dynamically removing node from document using c#
- Previous by thread: Re: Oracle Data Provider Issue
- Next by thread: Re: Oracle Data Provider Issue
- Index(es):
Relevant Pages
|