Oracle Data Provider Issue

  • Thread starter Thread starter benjo
  • Start date Start date
B

benjo

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
 
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.

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?
 
benjo said:
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

What version of ODP.NET are you using? Do you have connection pooling
enabled? Is the pool full?

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#)
------------------------------------------------------------------------
 
benjo said:
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:


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

What version of ODP.NET are you using? Do you have connection pooling
enabled? Is the pool full?

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#)
------------------------------------------------------------------------
 
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]
- (e-mail address removed)


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:


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

benjo
 
benjo said:
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]
- (e-mail address removed)


om...
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:


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#)
------------------------------------------------------------------------
 
I also think that is not possible that the nop is the blocking, but
what I have posted is that the debug shows me.
Oracleclient 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]
- (e-mail address removed)
om...
Hi all,
I have developed an application which strongly access anOracle
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 fromOracle
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#)
------------------------------------------------------------------------

I've switched on the connection pooling but the problem still affects
my application. What I can see is the following thing:

the connection-Oracle side is closed whereas the connection-.NET side
is still open and alive; i think that is for this misunderstanding
between .NET and ORACLE that the disassembly i posted above shows me
the execution waiting in an idle loop in the "nop statement"
 
Back
Top