This document contains late-breaking information for Microsoft® Transaction Server (MTS).
For further information, see the following topics:
Setting Up Microsoft Transaction Server
What's New in MTS 2.0?
MTS Product Documentation
The Microsoft Transaction Server 2.0 release permits transactional MTS components to access Oracle databases through ODBC. MTS works with Oracle7 Workgroup Server for Windows NT, Oracle 7 Enterprise Server for Windows NT, Oracle 7 Enterprise Servers on Unix, and Oracle Parallel Server on Unix.
Your MTS component may access an Oracle 8 database provided your component uses the Oracle7 client software. MTS does not support Oracle 8 client software.
MTS support for Oracle databases has been tested, but significantly more testing is planned before the product is released. During the Beta test period, you should only use this feature in an application development and test environment with test databases.
If you wish to access an Oracle database on either NT or UNIX under MTS transaction control then you must install the following software.
Important Earlier versions of the software may not work properly. Please ensure you install the correct versions of the software. Failing to do this is by far the most common source of problems when trying to use MTS with Oracle.
Component | Version |
Oracle for Windows NT | 7.3.3 with Patch 2 or later 1 |
Oracle SQL*Net | 2.3.3 2 |
Oracle OCIW32.DLL | 1, 0, 0, 5 3 |
Oracle for UNIX | 7.3.3 with patches 4 |
Microsoft Transaction Server 2.0 | Beta 3 with patches5 |
Microsoft ODBC Driver for Oracle (MSORCL32.DLL) | Beta 3 6 |
ADO | 1.5 7 |
You must install either the Oracle 7.3.3 Workgroup Server release for Windows NT or the Oracle 7.3.3 Enterprise Server release for Windows NT. The Oracle 7.3.2 and earlier releases of Oracle for Windows NT are not supported and will not work in conjunction with MTS transactions.
You must install Oracle 7.3.3 patch release 2 or later. Oracle patch release 2 contains fixes that are required to make Oracle XA transaction support work properly on Windows NT. The Oracle 7.3.3 release will not work with MTS unless Oracle 7.3.3 patch release 2 or later is installed.
Note If you encounter problems setting up Oracle patch release 2 on Windows 95, contact Oracle for support.
To obtain Oracle 7.3.3 patch releases from the Oracle customer support organization you must submit a problem report to the Oracle Customer Support Organization. These patch releases were not available from the Oracle public web site at the time this note was written.
You must install the Oracle SQL*Net 2.3.3 release for Windows NT. You can obtain this release from Oracle. Earlier versions of Oracle SQL*Net may not work.
You must ensure that the correct version of the Oracle OCIW32.DLL is installed. It is extremely common that the wrong version of this DLL is installed. Be very careful to check the version installed on your system.
The correct version of the Oracle OCIW32.DLL is:
Version 1, 0, 0, 5 Tuesday, March 18, 1997 2:47:52 PM Size 18KB.
The improper version of the Oracle OCIW32.DLL is:
Version 7.x Thursday, February 01, 1996 12:50:06 AM Size 36 KB
You can obtain the correct version of this DLL from the Oracle 7.3.3 installation CD from the \WIN32\V7\RSF73 directory.
If you wish to access an Oracle database on UNIX under MTS transaction control, then you must install at least the Oracle 7.3.3 release for that UNIX platform. It may also be necessary to install an Oracle 7.3.3 patch release for Oracle on UNIX.
You must check with Oracle Customer Support to determine if an Oracle 7.3.3 patch release is required for your Unix platform. Explain that you are going to access your Oracle database on UNIX using the new XA transaction support that is now included in the Oracle 7.3.3 release on Windows NT.
The following patch releases are known to work:
Platform | Oracle Patch |
HP 9000 | 7.3.3.3 |
IBM AIX | 7.3.3.2 |
Sun Solaris | 7.3.3.2 |
You must install Microsoft Transaction Server 2.0 Beta release 3 if you wish to access an Oracle database under MTS transaction control. MTS 2.0 and IIS 4.0 Beta releases can be obtained from http://www.microsoft.com/iis/beta.
You must install the MTS 2.0 Beta release 3 patches. You can obtain these patches from http://www.microsoft.com/support/transaction. These patches are required; they correct problems that are known to affect Oracle database support.
The Microsoft ODBC 2.0 Driver for Oracle (MSORCL32.DLL) is required. The MTS 2.0 / IIS 4.0 setup program automatically installs this DLL.
If you wish to access an Oracle database, we strongly suggest that you use the new Microsoft ODBC Driver for Oracle 2.0 even if you do not require transaction support. This new driver offers better performance than the ODBC 1.0 driver it replaces. The 1.0 driver serialized all activity at the driver level. All requests were single threaded through the driver. The 2.0 driver serializes all activities at the connection level. This allows different database connections to be used in parallel.
If your applications use ADO you must install the ADO 1.5 release. Earlier ADO releases will not work with the new ODBC 3.5 Driver Manager. The ADO 1.5 beta release is included in the IIS 4.0 / MTS 2.0 beta release that you can obtain from http://www.microsoft.com/iis/beta.
Install the Oracle 7.3.3 release on Windows NT.
Install the Oracle 7.3.3 patch 2 or later on Windows NT. The resulting Oracle version will be Oracle 7.3.3.2 or later depending upon which Oracle patch you install.
Ensure that the correct version of the Oracle OCIW32.DLL is installed as described in "Required Software".
If your Oracle database is located on a UNIX system, install the Oracle 7.3.3 release on that system.
Install any required Oracle 7.3.3 patch releases that are required for your UNIX system.
Install the Microsoft Transaction Server 2.0 beta release 3 from the http://www.microsoft.com/iis/beta web site. This will automatically install:
Install the Microsoft Transaction Server 2.0 Beta release 3 patches obtained from http://www.microsoft.com/support/transaction.
If a DTCXATM.LOG file is present on disk, it must be deleted. Use the Explorer to determine if this file is present and delete it if it is found. The Microsoft Distributed Transaction Coordinator service must be stopped before the DTCXATM.LOG file can be deleted.
To enable an Oracle database to work with MTS transactions, you must do the following:
Grant Select on V$XATRANS$ to public.
See your Oracle Server documentation for more information about configuring Oracle support for XA transactions.
After installation and configuration is complete you should validate your Oracle installation and configuration using the Oracle test program supplied with MTS. The Oracle test program uses Oracle's OCI XA interfaces in much the same way that MTS uses them. The Oracle test program determines whether you can connect to an Oracle database using Oracle's XA facility. If this test program does not work, then MTS will not work with Oracle.
Run the Oracle test program as follows:
c:>TestOracleXaConfig.exe -U<user id> -P<Password> -S<Server name as in the TNS file>.
If you run the test program with no parameters, it will display help information that describes the parameters that it requires. The test program will display information about each Oracle operation that it performs and whether each operation was successful.
After you have validated your Oracle installation and configuration using the Oracle test program, you can use the Sample Bank Application supplied with Microsoft Transaction Server to ensure that Microsoft Transaction Server can access your Oracle database.
Run the Sample bank Application as follows:
Owner scott
Name of Table Account
Column 1 Name AccountNo of type NUMBER
Column 2 Name Balance of type NUMBER
AccountNo Balance
1 1000
2 1000
[ODBC]
DRIVER=Microsoft ODBC for Oracle
UID=scott
PWD=mypassword
ConnectString=myserver
SERVER=myserver
If your applications use ADO make certain that you install the ADO 1.5 beta release. For details refer to the "Required Software" section above.
Oracle database connectivity is not supported from Digital Alpha platforms running Microsoft Transaction Server.
It is important that the correct version of the OCIW32.DLL be installed on your system. We have not yet determined who is responsible for installing the wrong version of this DLL. At present you should check the version of the DLL anytime you reinstall Oracle or Microsoft Transaction Server.
Oracle changes DLL names with each release. Currently, MTS looks for the DLL names for Oracle version 7.3.3. As MTS cannot predict future names of these DLLs, you may need to modify the values in the following registry key when you upgrade your Oracle installation:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer
Under this key there are two string-named values.
If you want to create more than a few dozen connections to an Oracle database, you must configure the Oracle server to support additional database connections. You may experience one or more of the following symptoms if you fail to do this:
If you experience any of these problems, increase the following Oracle server configuration parameters:
To install MTS without other Option Pack components:
Note that choosing the Development Option also installs the Data Access components.
It is recommended that you change the location of the MS DTC log file from the shared disk drive to a local disk drive if you uninstall Microsoft Cluster Server (MSCS). Not changing the log file location may result in a corrupted log file or access violations in MS DTC. You must change the location of the log file all cluster nodes.
To reset the MS DTC log file on a clustered server, you must run the MTS Explorer on the node that currently owns the shared disk containing the log file.
On a clustered server, you can start and stop MS DTC by either using the MTS Explorer or using the MSCS administrative utility. Using "net stop msdtc" does not work.
When using MTS components on an MSCS cluster, base clients may experience problems creating and calling objects after MS DTC fails over to another node in the cluster. To workaround this problem, shutdown all server processes and rerun the base client.
The client application must release all references to MTS components on the failing node, and reinstantiate the components. The components are instantiated on the second node.
You must restart the MTS Explorer to view current transaction statistics when the cluster node is taken offline, transferred to another node, and moved back online.
You can use the Remote Components folder to pull components from a Microsoft Cluster Server (MSCS) node by following these steps:
Note If you change the Remote Server Name on the MSCS computer, you must also reinstall the remote components on client computers.
MTS replication does not replicate empty packages.
Before upgrading your installation of MTS 2.0 from Beta 2 to Beta 3, delete the DTCXATM.LOG file, which is located in the \Mssql\Data sub-directory. Note that you must stop the MS DTC service before deleting DTCXATM.LOG.
The MS DTC log file cannot be compressed.
After installing MTS 2.0, you may see an Access Violation when shutting down Visual Basic 5.0. This is a known Visual Basic 5.0 bug that can be fixed by installing Visual Studio Service Pack 2 from http://www.microsoft.com/vstudio. Refer to Knowledge Base article Q167213 for more information about this problem.
There is a known problem that occurs when, if an MTS server process terminates unexpectedly (because of a failfast, an assert, or an access violation), subsequent attempts to restart the application create multiple MTS processes. (The correct behavior should be only one MTS process per package.) In case of unexpected server process termination, you must reboot your Windows 95 computer.
There is a known problem with using more than approximately 40 Named Pipe connections from a Windows 95 client to MS Distributed Transaction Coordinator (DTC) that may cause deadlocks. To fix this problem, change the protocol between the ODBC driver and SQL Server to TCP/IP.
Windows NT 4.0 Option Pack Beta 3 installs Advanced Data Connector (ADC) version 1.5. The ADC 1.5 client only works with the Internet Explorer (IE) 4.0 Beta release. The ADC 1.5 client will not work with any version of Internet Explorer before IE 4.0.
For users of the MTS Adventure Works sample application, check http://www.microsoft.com/adc for an updated ADC 1.1 client that will work with Internet Explorer version 3.0 or later. You will need to recompile the MTS Adventure Works sample to set a reference to the new ADC 1.5 recordset library (Msador15.dll).
You will not be able to access the Help documentation from the Advanced tab of the My Computer property sheet.
COM allows one server to emulate another using the TreatAs or AutoTreatAs registry keys. Suppose a client creates a component of a given CLSID using CoCreateInstance. If the TreatAs or AutoTreatAs key is present under that CLSID in the registry, COM will instead create the component indicated by this key. This effectively routes client requests to the emulating server. (The same routing is possible using the ProgID if the client refers to its servers by ProgID instead of CLSID.)
Components being emulated using TreatAs or AutoTreatAs are not valid MTS components and cannot be imported. If the emulation is to be added after the component is imported, the component must be deleted from the MTS catalog, then replaced with the emulating component.
The Java Sample Bank components are automatically configured by MTS Setup and require no additional steps in order to run them.
If you want to recompile the Java Sample Bank components, follow these steps:
MTS role-based package access control does not work properly when packages are front-ended by mutliplexers that impersonate multiple clients (such as IIS). MTS packages used in these environments should be configured with security disabled.
ADO erases any information that you might have put in the ErrorInfo object. There is a code work-around for this problem that needs to be implemented in your error handler.
For Visual Basic, the code is similar to the following:
ErrorHandler: ' cleanup If Not adoRS Is Nothing Then Set adoRS = Nothing End If If Not adoConn Is Nothing Then Set adoConn = Nothing End If Err.Raise Err.Number, "Bank.Accout.Post", Err.Description Exit Function
For Visual C++, the code is similar to the following:
// // ErrorInfo is saved here because the following // ADO cleanup code may clear it. // IErrorInfo * pErrorInfo = NULL; GetErrorInfo(NULL, &pErrorInfo); if (adoRsBalance) adoRsBalance->Release(); if (adoCoConnection) adoCoConnection->Release(); AtlReportError( CLSID_CAccount, pErrMsg, IID_IAccount, hr); // // put the error back in TLS // SetErrorInfo(NULL, pErrorInfo);
For Visual J++, the code is similar to the following:
if (adoRsBalance != null) { if (adoRsBalance.getState() == ObjectStateEnum.adStateOpen) adoRsBalance.Close(); ComLib.release (adoRsBalance); } if (adoConn != null) { if (adoConn.getState() == ObjectStateEnum.adStateOpen) adoConn.Close(); ComLib.release (adoConn); }
Note In Java you must explicitly close recordsets and/or connections as well as explicitly release the ADO objects.
There is a known problem with custom interfaces that have method parameters that are of type float or double. If your interface uses these types, you should use a dual interface and a type library instead of a custom interface proxy/stub DLL. When encountering such interfaces, MTS shuts down the server process that hosts a component that implements this interface. MTS also writes the following message in the Windows NT event log:
ôUnable to obtain extended information about this interface. The interface may not have been generated using the -Oicf options in MIDL or the interface has methods with types (float or double) that are not currently supported for custom interfaces.ö
MTS components should not be built as MFC Extension DLLs because such DLLs can be loaded only by MFC applications. A COM component, and therefore an MTS component, should be built so that it can be loaded into any process, regardless of the type of application that started the process.
For more information on MFC Extension DLLs, see the Microsoft Visual C++ ProgrammerÆs Guide.
When an Mtx.exe process running Visual Basic 4.0 components is "Shutdown because idle for x minutes," there is a known problem that results in a Read Access Violation. Currently there is no known solution to this problem. It is thought that if more than two Visual Basic 4.0 components are used in a process it is more likely to happen. One workaround is to set your package to "Leave running when idle". This is only a problem when using components built with Visual Basic 4.0 ¾ no such problem exists with Visual Basic 5.0.
If your server component uses RDO, never let an rdoConnection with an active rdoResultset fall out of scope or a deadlock may result. You must manually close the rdoResultset or rdoConnection to avoid the deadlock. The following sequence produces a deadlock:
The deadlock is avoided by manually closing the resultset (or connection) at the end of Step 1, which immediately makes the ODBC calls to close the stmt (and connection). The root of the problem is the delay introduced by the message posted to the hidden window to do the ODBC closes.
Whenever you recompile an OLE DLL project in Visual Basic 4.0, Visual Basic re-writes all of the registry entries for all of the components (Visual Basic classes) that live in that DLL. Additionally, Visual Basic may generate new GUIDs (depending on your project configuration) to identify the components in that DLL. This means that your MTS components are no longer properly registered in the MTS catalog.
There are two solutions to this problem. First, there is a Refresh button in the Transaction Server Explorer, as well as the Refresh All Components command on the Tools menu. If you use this command Microsoft Transaction Server will repair all inconsistencies in registry entries of components currently in the right pane of the Explorer.
If you install the development version of Microsoft Transaction Server, check the VB Addin option to enable a feature that will automatically refresh your components after recompiling them. The next time you run Visual Basic 4.0, the add-in will be automatically installed in your Visual Basic IDE. You can also turn the feature on and off on a per-project basis by checking or unchecking the MTxServer RegRefresh | AutoRefresh after compile command on the Visual Basic Add-Ins menu. If you decide you want to refresh all of your Microsoft Transaction Server components at any given time, you can use the MTxServer RegRefresh | Refresh all components now command on the Add-Ins menu.
Important The Visual Basic Add-in has been updated to work with both Visual Basic 4.0 and 5.0. Once installed, it will automatically refresh the Transaction Server catalog with the changes made during each compile. The add-in menu option to enable and disable the automatic refresh is no longer supported.
Using the add-in will properly refresh the MTS catalog, even after Visual Basic compilations that generate new component GUIDs. Note also that the Compatible OLE Server setting in the Visual Basic Project Options dialog box can be used to stop Visual Basic from generating new component GUIDs.
Refreshing the MTS catalog depends on you not changing the ProgIDs of your components. In Visual Basic 4.0, a componentÆs ProgID is formed by the following concatenation: project name.class name. If you change either of these items, you will have to reinstall your component(s) in the MTS Explorer.
Building your component in Visual Basic 4.0 without selecting the Compatible OLE Server option replaces your old CLSID and IID on each compile. This has disadvantages when developing an MTS component, even with the Visual Basic add-in enabled.
When reporting a bug, please include the following information in your bug report:
© 1997 Microsoft Corporation
These materials are provided “as-is,” for informational purposes only.
Neither Microsoft nor its suppliers makes any warranty, express or implied with respect to the content of these materials or the accuracy of any information contained herein, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. Because some states/jurisdictions do not allow exclusions of implied warranties, the above limitation may not apply to you.
Neither Microsoft nor its suppliers shall have any liability for any damages whatsoever including consequential incidental, direct, indirect, special, and loss profits. Because some states/jurisdictions do not allow exclusions of implied warranties, the above limitation may not apply to you. In any event, Microsoft’s and its suppliers’ entire liability in any manner arising out of these materials, whether by tort, contract, or otherwise shall not exceed the suggested retail price of these materials.