Re: ORA-03121

From: Reza Abouk <rabouk_at_mcimail.com>
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 to
resolving 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


  1. EXIT from Windows to the DOS prompt.
  2. Type PATH at the DOS prompt and <RETURN>. Make a note of all DRIVES currently in your path (C:, D:, etc..).
  3. 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
  1. 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.
  2. 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

  1. 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
  2. Call Oracle Worldwide Support if the problem is still not resolved and if you have a valid CSI or PC-Registration number.
Received on Mon Jan 29 1996 - 00:00:00 CET

Original text of this message