Re: ORA-03121
Date: 1996/01/29
Message-ID: <4eip7f$dc4_at_news.internetmci.com>
rick_at_novia.net (Rick Badillo) wrote:
>I just installed Oracle Workgroup Server on a Windows NT box. I am a
>first time Oracle user. The install went fine, however, I am getting
>this pesky error ( ORA-03121 : NO INTERFACE DRIVER CONNECTED)
>What does this mean? Thanks in advance.
Check the following two documents for your answer.
Document ID: 104617.217 Title: WIN: ORA-3121 and SQL*Net TCP/IP Creation Date: 17 January 1994 Last Revision Date: 20 January 1994 Revision Number: 1 Category: Desktop: RDBMS, Utilities, Networking Product: SQL*Net TCP/IP Product Version: V1.1 Platform: WINDOWS Information Type: ADVISORY Impact: HIGH Abstract: This bulletin describes a step-by-step approach toresolving ORA-3121 with SQL*Net
TCP/IP for Windows.
Keywords: SQL*NET;TCPIP;WINDOWS;3121
WIN: ORA-3121 and SQL*Net TCP/IP
This bulletin first gives an overview of SQL*Net TCP/IP for Windows and an ORA-3121 and then outlines the steps to diagnose an ORA-3121 at the end of the bulletin.
SQL*Net TCP/IP for WINDOWS overview :
SQL*Net TCP/IP for WIN V1.x as it stands today is a set of two DLLs - SQLTCP.DLL and SQLTCP1.DLL. These DLLs are loaded on the fly by the OCI DLLs when a connect string for ORACLE is identified as a TCP/IP protocol string. The ORACLE Interface DLLs will attempt to load SQLTCP. DLL first. If this fails, an attempt is made locate the DOS TSR version of the driver. If both these fail of course you get an ORA-3121.
|----------------| | Oracle Win app | |----------------| | (linked with) |-----------------| | OCI layer : can | | be ORA6WIN.DLL | | or | | ORA7WIN.DLL | |-----------------| | (loads on the fly) | (and gets entry points) | (to OSNTDS and OSNTCP - ORA-3121 may occur here !) |-----------------| | SQLTCP.DLL | (Initialization of DLL --fails if WINDOWS |-----------------| (is not in ENHANCED mode--ORA-3121) | | (linked with) |-----------------| (entry points OSNTRA, OSNTDS,....) | SQLTCP1.DLL | |-----------------| | | | |----------->| | (linked with) | (linked with) | | |------------------| |----------------| | ORA7WIN.DLL -- | | MSOCKLIB.DLL - | | used by SQL*Net | | entry points to| | for some lookup | | all TCP/IP APIs| | routines .... | |----------------| |------------------| | | | (linked with) | | | v v |----------------| . . | COREWIN.DLL | (Uses VSL.INI and TCP_VENDOR from ORACLE.INI |----------------| to load a vendor specific interface DLL like MNOVLWP.DLL or to contact the vendor specific interface TSR like MFTP.EXE) (1) As mentioned above, SQL*Net DLLs are loaded on the fly the OCI DLLs in Windows. Windows when attempting to load a DLL will look in the current working directory for the DLL, and then the WINDOWS directory (where the WIN.COM file is located), and then the WINDOWS/SYSTEM directory, and then each directory on the PATH. If the load failed due to the inability to loacate the SQLTCP.DLL and SQLTCP1.DLL and no DOS SQL*Net TSR was loaded prior to getting into WINDOWS, an ORA-3121 results. (2) Even if the SQL*Net DLLs are locatable and get loaded by WINDOWS, they will refuse to initialize if they detect that WINDOWS is not in 386- ENHANCED mode. (3) Last but not the least, ORACLE6 Windows applications (those that are built using ORA6WIN.LIB + ORA6WIN.DLL) often turn up with ORA-3121, even though ORACLE7 Windows applications connect succesfully using the SQL*Net DLLs. The cause of this is that versions of ORA6WIN.DLL earlier than 6.0.34.1.0 are not designed to use SQL*Net DLLs. So, if there are multiple copies of ORA6WIN.DLL on your machine rename all but the latest dated (04/13/92 or later) DLL, and make sure it is on the PATH. Often the date on a DLL will be misleading. So, instead one must load the DLL into a text editor and do a text search for the string "6.0.". This will give you the version of the DLL!! Also to verify if a particular copy of any DLL is being loaded by WINDOWS, rename the DLL in question to something else. Restart WINDOWS and also the application. IF the application comes up without any errors from Windows regarding missing DLLs, this particular copy of the DLL wasn't being used at all.
Steps to diagnose an ORA-3121:
(1) Check the connect string. Do not specify the "_at_" sign in front of the
connect string if you are explicitly providing the connect string in the login screen. Just type in the connect string. For example: t:orasrv:orasid You can also omit specifying the connect string in the login screen and leave the field for the connect string blank if you set the LOCAL parameter in the appropriate configuration file: LOCAL=t:orasrv:orasid Finding the configuration files: ******************************** Applications linked with the ORACLE7 WINDOWS DLL's (ORA7WIN.DLL) will look at the ORA_CONFIG parameter in the WIN.INI to find the configuration file. You should have a section in your WIN.INI that looks like: [Oracle] ORA_CONFIG=C:\WINDOWS\ORACLE.INI Applications linked with ORACLE6 WINDOWS DLLs (ORA6WIN.DLL) will use the CONFIG variable in the DOS environment to find the configuration file (usually CONFIG=C:\ORACLE6\CONFIG.ORA). Type SET at the DOS prompt to see what CONFIG is set to in the DOS environment. If you do not have CONFIG set in the environment, add a line to your autoexec.bat to set it equal to the ORACLE.INI: SET CONFIG=C:\WINDOWS\ORACLE.INI Reboot after adding this line. You can also manually execute this command from the DOS prompt, but you MUST completely EXIT Windows before setting CONFIG and then go back into Windows. Any parameters like LOCAL, REMOTE, SQLNET DBNAME <alias>, must be in the appropriate configuration file. For example, to connect from Data Browser you would place the LOCAL parameter in the ORACLE.INI (or whatever ORA_CONFIG in the WIN.INI points to) because Data Browser is built using ORA7WIN.DLL. To connect from Oracle Card, which is linked with ORA6WIN.DLL, you would place the LOCAL parameter in the CONFIG.ORA (or whatever the DOS environment variable CONFIG points to). Please see the note at the end of this document for a list of some of the Windows V6 products and V7 products. Please refer to the Appendix B in your Setting Up SQL*Net TCP/IP for Windows manual for further documentation of othe CONFIG parameters like REMOTE and SQLNET DBNAME.
(2) Windows must be in 386-Enhanced mode. Start windows with WIN /3.
(3) The SQLTCP.DLL and SQLTCP1.DLL must be on the DOS PATH. Alter the
PATH statement in the AUTOEXEC.BAT to include the ORAWIN\BIN directory.
(4) If any application is relying on ORA6WIN.DLL to connect, then the
version of the DLL must be at least 6.0.34.2.0 -- a simple string search with a text editor on the DLL for "6.0." or "7.0" will reveal the version number. (5) In case of multiple copies of any DLL leave only the one with the highest version around or simply copy the one with the latest version onto all existing copies of the DLL. To locate multiple copies of the ORA6WIN.DLL, follow these steps: a) Type PATH at the DOS prompt and <RETURN>. Make a note of all DRIVES currently in your path (C:, D:, etc..). b) Do a search on all the above DRIVES in the DOS path on a file called ORA6WIN.DLL (recommended ways are using the FILEFIND utility from Norton or by simply doing a DIR ORA6WIN.DLL /S in DOS 5.0 or later, from the root directory. You may also use the File Search utility in Windows File Manager). If you have multiple copies of the ORA6WIN.DLL, rename all the copies of the file (to something such as ORA6WINX.DLL), EXCEPT ONE. Ensure that this copy of the ORA6WIN.DLL is either dated 4/13/92 (285573 bytes) or 10/15/92 (380639 bytes). These two versions of the ORA6WIN.DLL were distributed directly by Oracle Corporation. If you have a file that is dated later than 10/15/92 and is of a size larger than 380639 bytes,that may work too. As mentioned above, the date of the ORA6WIN.DLL must be v6.0.34.2.0 or later. (If you do not have a copy of the ORA6WIN.DLL with one of the above dates then contact the vendor of your third party application for a copy of this file. If you have any other Oracle product with a disk labeled "Windows Required Support Files Version 6.0.xx.x.x" then this should also have a current copy of the ORA6WIN.DLL). c) Make a note of the directory that the ORA6WIN.DLL resides in. d) Ensure that the above directory is in the current PATH. Verify by typing PATH and <RETURN> at the DOS prompt. Document ID: 103883.585 Title: ORA-03121 and SQL*Net for Windows Creation Date: 08 September 1993 Last Revision Date: 17 October 1994 Revision Number: 3 Product: SQL*Net Product Version: V1 and V2 Platform: WINDOWS Information Type: ADVISORY Impact: HIGH Abstract: This bulletin describes a step-by-step approach to resolving ORA-03121 ("no interface driver connected - function not performed") errors when attempting to connect to a remote Oracle RDBMS using SQL*NET for Windows. Keywords: SQLNET;WINDOWS;3121 ------------------------------------------------------------------------------ ORA-03121 and SQL*Net for Windows
This bulletin describes a step-by-step approach to resolving ORA-03121 ("no interface driver connected - function not performed") errors when attempting to connect to a remote Oracle RDBMS using SQL*NET for Windows with Oracle Version 6 products (see the end of bulletin for a description of these products).
ORA-03121 with SQL*Net V2
You will get an ORA-03121 when trying to connect via SQL*Net V2 if you do not use the "tns:" net prefix in the connect string if you're using an Oracle V6 based application. An Oracle V6 based application means that the application is linked to use ORA6WIN.DLL. If the application is linked to use ORA7WIN.DLL, the "tns:" prefix is not needed.
Be careful not to use the old V1 net prefixes. A V2 connect string consists of the tnsnames.ora alias. This is the first line in your tnsnames.ora file, which is located in either c:\orawin\network\admin directory or in the directory set by TNS_ADMIN in the oracle.ini file.
Here's an example of a tnsnames.ora file:
test1 = (DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = prodserv) (PORT = 1521) ) ) (CONNECT_DATA = (SID = db1) ) )
In this example, the alias is test1 so you would connect as follows: connect scott/tiger_at_test1 (if using an application linked with ORA7WIN.DLL) connect scott/tiger_at_tns:test1 (if using an application linked with ORA6WIN.DLL)
ORA-03121 with SQL*Net V1
- EXIT from Windows to the DOS prompt.
- Type PATH at the DOS prompt and <RETURN>. Make a note of all DRIVES currently in your path (C:, D:, etc..).
- Do a search on all the above DRIVES in the DOS path on a file called ORA6WIN.DLL (recommended ways are using the FILEFIND utility from Norton or by simply doing a DIR ORA6WIN.DLL /S in DOS 5.0 or later, from the root directory. You may also use the File Search utility in Windows File Manager).
If you have multiple copies of the ORA6WIN.DLL, rename all the copies of the file (to something such as ORA6WINX.DLL), EXCEPT ONE. Ensure that this copy of the ORA6WIN.DLL is either dated 4/13/92 (285573 bytes) or 10/15/92 (380639 bytes). These two versions of the ORA6WIN.DLL were distributed directly by Oracle Corporation. If you have a file that is dated later than 10/15/92 and is of a size larger than 380639 bytes, that may work too.
(If you do not have a copy of the ORA6WIN.DLL with one of the above dates then contact the vendor of your third party application for a copy of this file. If you have any other Oracle product with a disk labeled "Windows Required Support Files Version 6.0.xx.x.x" then this should have a current copy of the ORA6WIN.DLL)
4. Make a note of the directory that the ORA6WIN.DLL resides in.
5. Ensure that the above directory is in the current PATH. Verify by typing
PATH and <RETURN> at the DOS prompt.
6. Verify that the ORAWIN\BIN directory is also in your current path
(or wherever your SQL*Net for Windows is installed. If you are not sure, then it should be the ORACLE_HOME\BIN directory, where ORACLE_HOME is defined in the ORACLE.INI file. See Step 7 below). Also check to make sure that the SQL*Net DLL's exists in the ORACLE_HOME\BIN directory (for example, SQLSPX.DLL and SQLSPX1.DLL for SQL*Net SPX for Windows, and SQLTCP.DLL and SQLTCP1.DLL for SQL*Net TCP/IP for Windows). You should also have ORA7WIN.DLL in the ORACLE_HOME\BIN subdirectory.
7. Edit the WIN.INI file in the WINDOWS directory. Ensure that you have a
group called Oracle which looks something like:
[Oracle]
ORA_CONFIG=C:\WINDOWS\ORACLE.INI
7a) Type SET at the DOS prompt again and <RETURN>. Check to see if a DOS
environment variable called CONFIG is set to point to a file called CONFIG.ORA. You will see something like:
CONFIG=C:\ORACLE6\CONFIG.ORA b) If you do not have the CONFIG variable set in the environment, add the
following statement to your autoexec.bat file and re-boot:
SET CONFIG=C:\WINDOWS\ORACLE.INI
(Put the appropriate path to your Windows directory).
If CONFIG was not set and you had to do step 7b, then skip step 8.
8. Ensure that the RDBMS70 in ORACLE.INI is pointing to the correct location
((f:oranw\rdbms70 for the server instead of g:\orainst\rdbms for the client)
9. Match the following parameters in the CONFIG.ORA and the ORACLE.INI
EXACTLY (see above steps for the locations of these files). Some of these parameters may not exist in both the files! We want to ensure that these parameters match exactly if they are present in either the CONFIG.ORA or the ORACLE.INI. If some of these parameters do not exist in both the files, don't add them. Also, some of these parameters may be unnecessary, but adding them in both the CONFIG.ORA and the ORACLE.INI will not hurt.
List of Parameters:
WIN_LOCAL_SESSIONS
WIN_REMOTE_SESSIONS
LOCAL
REMOTE
INTERRUPT
XMMITR
TCP_HOSTS_FILE
TCP_SERVICES_FILE
SQLNET DBNAME
- Launch Windows now and ensure that Windows is coming up in ENHANCED mode by clicking on HELP in Program Manager and clicking on ABOUT PROGRAM MANAGER here. SQL*NET for Windows WILL NOT WORK in Standard mode.
- Do not specify the '_at_' sign in front of the connect string if you are explicitly providing the connect string in the login screen. Just type in the connect string, for example:
t:orasrv:orasid or x:orasrv
- You can also omit specifying the connect string in the login screen and leave the field for the connect string blank if you set the LOCAL parameter in the ORACLE.INI and CONFIG.ORA: LOCAL=t:orasrv:orasid
- Call Oracle Worldwide Support if the problem is still not resolved and if you have a valid CSI or PC-Registration number.