Collecting troubleshooting data for WCF-Oracle adapter
This article is intended to provide all the data gathering steps you might need while working on WCF-Oracle adapter issue with BizTalk Server 2006 R2 onwards. This document contains the steps to collect following information:
- WCF-Oracle Adapter Traces
- ODP.NET Performance Counters
- ODP.NET Traces
WCF-Oracle Adapter Traces
Add the following section to the corresponding BtsNtSvc.exe.config/BtsNtSvc64.exe.config file. Restart the host instance.
<system.diagnostics>
<sources>
<source name ="System.ServiceModel" switchValue="Verbose">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name ="System.ServiceModel.MessageLogging" switchValue="Verbose">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name ="System.Runtime.Serialization" switchValue="Verbose">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="Microsoft.ServiceModel.Channels" switchValue="Verbose">
<listeners>
<add name="xmlAdapter" />
</listeners>
</source>
<source name="Microsoft.Adapters.OracleDB" switchValue="Verbose">
<listeners>
<add name="xmlAdapter" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener"
traceOutputOptions="LogicalOperationStack" initializeData="C:\Trace\WCFTrace.svclog" />
<add name="xmlAdapter" type="System.Diagnostics.XmlWriterTraceListener"
traceOutputOptions="LogicalOperationStack" initializeData="C:\Trace\AdapterTrace.svclog"/>
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"/>
</diagnostics>
</system.serviceModel>
Please make sure that the user under which BizTalk host instance is running has proper permission on the above mentioned folder, “Trace” in this case..
ODP.NET Performance Counters
Make sure you have that registry entry for “PerformanceCounters” and set it to 4095. There are two different places you need to do that entry depending up on 32 and 64 bit host instance you are using to host the Oracle RL.
For 64 bit : HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\2.111.7.0
For 32 bit : HKEY_LOCAL_MACHINE\Software\WOW6432node\Oracle\ODP.NET\2.111.7.0
The possible values are:
Value |
Description |
0 |
Not Enabled |
1 |
Number of sessions being established with Oracle Database every second. |
2 |
Number of sessions being severed from Oracle Database every second. |
4 |
Number of active connections originating from connection pools every second. |
8 |
Number of active connections going back to the connection pool every second. |
16 |
Total number of active connections. |
32 |
Number of inactive connection pools. |
64 |
Total number of connections in use. |
128 |
Total number of connections available for use in all the connection pools. |
256 |
Number of pooled active connections. |
1024 |
Number of non-pooled active connections. |
2048 |
Number of connections that will be soon available in the pool. User has closed these connections, but they are currently awaiting actions, such transaction completion, before they can be placed back into the pool as free connections. |
4095 |
All the above |
Default: |
0 |
Once that is done you need to register the perfmon counters by running following command:
OraProvCfg
/action:register
/product:odp
/component:perfcounter
/providerpath:C:\app\Administrator\product\11.1.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll
Typically you can find OraProvCfg at C:\app\Administrator\product\11.1.0\client_1\ODP.NET\bin\2.x\. Once you run this command you should see the perfmon counters called “Oracle Provide for .Net”. But you might not see the corresponding instances to select. In that case, restart your host instance and you should be good. The syntax for instance is <processeid#appDomainIndex>. Here the process id should match with the process id of your host instance.
ODP.NET Traces
ODP.NET traces can be enabled by adding a registry entry under following hive:
HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\<version>. Here the version is corresponding to Oracle.DataAccess.dll version. Underneath you need to enter three more keys:
1. TraceLevel (string)
Possible values:
Value |
Description |
0 |
None |
1 |
Entry, exit, and SQL statement information |
2 |
Connection Pooling statistics |
4 |
Distributed transactions (enlistment and delistment) |
8 |
User-mode dump creation upon unmanaged exception |
16 |
HA Event Information |
32 |
Load Balancing Information |
64 |
Self Tuning Information |
127 |
All the above |
Default: |
0 |
2. TraceFileName (string) – path and the file name where you want the traces to get dump
3. TraceOutput (string) – 0 for single files and 1 for multiple files
Written by
Chirag Pavecha
Reviewed by
Jainath V R
Microsoft India GTSC