ORA 12154 - 无法从 toad/SQLplus 连接

ORA 12154 - unable to connect from toad/SQLplus

当我尝试连接我的 TNSNAMES.ora 文件中的任何数据库时,SQLPLUS 抛出

ORA-12154: TNS could not resolve service name

我已经检查过这些东西了:

TNS_ADMIN environment variable is defined as "C:\oraclexe\app\oracle\product.2.0\server\NETWORK\ADMIN"  

"C:\oraclexe\app\oracle\product.2.0\server\NETWORK\ADMIN\tnsnames.ora" was located  

The following connect descriptor was found for my_db in the tnsnames.ora file  

my_db=  
  (DESCRIPTION=  
    (ADDRESS=  
      (PROTOCOL=TCP)  
      (HOST=local.db)  
      (PORT=1521)  
    )  
    (CONNECT_DATA=  
      (SID=SCMPROD)  
    )  
  )  

"C:\oraclexe\app\oracle\product.2.0\server\NETWORK\ADMIN\sqlnet.ora" was located  

NAMES.DIRECTORY_PATH specifies TNSNAMES in the sqlnet.ora file  

问题是:

缺少什么?

更新

现在在 SqlPlus 上使用 the usr/pwd@SELFTEST 连接字符串可以正常工作

这不可能是服务器上的错误,因为在我的旧 PC 上它仍然接受我的连接并且我的所有公司都在使用它。

tnsname.ora

SELFTEST=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=10.100.2.7)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=GOLDtest)
    )
  )

尝试从 Toad for Oracle 连接时问题仍然存在...

来自source

ORA-12154: TNS:could not resolve the connect identifier specified
Cause: A connection to a database or other service was requested using a connect identifier, and the connect identifier specified could not be resolved into a connect descriptor using one of the naming methods configured. For example, if the type of connect identifier used was a net service name then the net service name could not be found in a naming method repository, or the repository could not be located or reached.
Action:

  • If you are using local naming (TNSNAMES.ORA file):

  • Make sure that "TNSNAMES" is listed as one of the values of the NAMES.DIRECTORY_PATH parameter in the Oracle Net profile (SQLNET.ORA)

  • Verify that a TNSNAMES.ORA file exists and is in the proper directory and is accessible.

  • Check that the net service name used as the connect identifier exists in the TNSNAMES.ORA file.

  • Make sure there are no syntax errors anywhere in the TNSNAMES.ORA file. Look for unmatched parentheses or stray characters. Errors in a TNSNAMES.ORA file may make it unusable.

  • If you are using directory naming:

  • Verify that "LDAP" is listed as one of the values of the NAMES.DIRETORY_PATH parameter in the Oracle Net profile (SQLNET.ORA).

  • Verify that the LDAP directory server is up and that it is accessible.

  • Verify that the net service name or database name used as the connect identifier is configured in the directory.

  • Verify that the default context being used is correct by specifying a fully qualified net service name or a full LDAP DN as the connect identifier

  • If you are using easy connect naming:

  • Verify that "EZCONNECT" is listed as one of the values of the NAMES.DIRETORY_PATH parameter in the Oracle Net profile (SQLNET.ORA).

  • Make sure the host, port and service name specified are correct.

  • Try enclosing the connect identifier in quote marks. See the Oracle Net Services Administrators Guide or the Oracle operating system specific guide for more information on naming.

ORA-12154: TNS could not resolve service name

my_db=  
  (DESCRIPTION=  
    (ADDRESS=  
      (PROTOCOL=TCP)  
      (HOST=local.db)  
      (PORT=1521)  
    )  
    (CONNECT_DATA=  
      (SID=SCMPROD)  
    )  
  )

错误是关于不正确的服务名称。我看到您的 tnsnames.ora 没有 service_name,而是您提到了 SID。可能这是错误的原因。

您可以将 tnsnames.ora 编辑为:

SCMPROD =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = SCMPROD)
 )
)

假设,SCMPRODservice_name