Microsoft KB Archive/269344

From BetaArchive Wiki
Knowledge Base


Article ID: 269344

Article Last Modified on 5/12/2003



APPLIES TO

  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft OLE DB Provider for Oracle Server 1.0
  • Microsoft OLE DB Provider for Oracle Server 1.0
  • Microsoft OLE DB Provider for Oracle Server 1.0



This article was previously published under Q269344

SYMPTOMS

When attempting to enlist in a distributed transaction by using either the Microsoft ODBC for Oracle or the Microsoft OLE DB Provider for Oracle, the following error message occurs:

Driver not capable.

CAUSE

The Microsoft ODBC for Oracle driver and Microsoft OLE DB Provider for Oracle use the Mtxoci.dll file to communicate with the OCI layer of Oracle. The version of Mtxoci.dll that is provided with Microsoft Data Access Components (MDAC) 2.5 or later requires full security access to the registry keys for the Oracle client DLLs. If the MDAC client does not have full access to these keys, the MDAC client defaults to using the Oracle 7.x client DLLs. If Mtxoci.dll cannot find the proper Oracle library DLLs, it unloads itself and the Microsoft Oracle drivers default to using the Ociw32.dll file directly. If Mtxoci.dll is not loaded, you can access normal Oracle database functionality through the Ociw32.dll file, but extended functionality, such as distributed transactions, is disabled.

RESOLUTION

Because Microsoft Windows 95 and Microsoft Windows 98 do not have security settings on the registry keys, this problem does not affect Microsoft Windows 95 or Microsoft Windows 98-based computers. On Microsoft Windows NT and Microsoft Windows 2000-based computers, use the Regedt32.exe tool to set permissions on the appropriate keys (grant Everyone full permissions, or grant full permissions to restricted users such as the System account). Refer to the "More Information" section on which keys are affected.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Both the Microsoft ODBC for Oracle driver and the Microsoft OLE DB Provider for Oracle rely on Mtxoci.dll to provide support for distributed transactions. When Mtxoci.dll is first loaded, it attempts to read the Oracle client DLL keys from the registry to determine the proper Oracle client DLLs to load.

On Microsoft Windows 95, Microsoft Windows 98 or Microsoft Windows NT 4.0-based computers, these keys are located under the following registry key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer


On Microsoft Windows 2000-based computers, these keys are located under the following registry key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI


There are 3 string values under these keys:

  • OracleXaLib
  • OracleSqlLib
  • OracleOciLib

Depending on which version of the Oracle client you have installed, these keys can point to different Oracle client DLL names. These keys are documented in the following Microsoft Knowledge Base article:

193893 INFO: Using Oracle with Microsoft Transaction Server and COM+


The code to read these registry keys in Mtxoci.dll requests KEY_ALL_ACCESS rights when attempting to read these keys. If the client process does not have adequate permissions to open these keys (for example, under Internet Information Server [IIS] or inside of a Microsoft Transaction Server [MTS] or Component Object Model [COM+] host running under a System account), Mtxoci.dll fails to read the keys and defaults back to hard-coded settings for the Oracle 7.x client DLLs.

If the Oracle client DLLs cannot be found, the Microsoft Oracle drivers unload Mtxoci.dll and uses Ociw32.dll directly. Use of Ociw32.dll disables support for distributed transactions with the Microsoft Oracle drivers and can result in a "Driver not capable" error message being reported to the client. Note that with certain versions of Mtxoci.dll this could incorrectly report the following error message:

ORA-00000: normal, successful completion.

Refer to the following Microsoft Knowledge Base article for more information:

254675 FIX: DTC/MTS Errors Cause 'Ora-00000 normal, successful completion' Messages





Additional query words: MSORCL32 MSDAORA

Keywords: kbbug kboracle kbdtc kb3rdparty kbpending KB269344