我正在尝试从SQL*Plus连接并获取错误ORA-12154,但我可以从SQL Developer连接而没有任何错误.我可以tnsping而且也lsnrctl没关系,听众已经开始运行了.
我可以sys像sqlplus sys as sysdba工作正常一样连接; 但我sqlplus username和另一个用户,当我输入密码时,它给了我:
ORA-12154: TNS:could not resolve the connect identifier specified
Run Code Online (Sandbox Code Playgroud)
SQL*Plus将@符号解释为TNS别名的开头.如果您的密码中包含密码,那么即使您没有尝试通过SQL*Net进行连接,也可以使用本地连接进行解密.所以,如果你这样做:
sqlplus user/p@ssword
Run Code Online (Sandbox Code Playgroud)
...然后它将只p作为密码,而@ssword作为别名,所以它将尝试ssword在您的tnsnames.ora文件中找到TNS别名.由于这不存在,您将得到"ORA-12154:TNS:无法解析指定的连接标识符"错误.
这也适用于您在提示时输入密码,所以如果您这样做:
sqlplus user
Enter password: p@ssword
Run Code Online (Sandbox Code Playgroud)
你会得到同样的东西.您可以通过用双引号括起密码来连接:
sqlplus user
Enter password: "p@ssword"
Run Code Online (Sandbox Code Playgroud)
但你不能用自发版本做到这一点.
如果您希望能够从SQL*Plus以及不以相同方式解释TNS的其他客户端进行连接,那么最好将密码更改为没有该特定字符的内容.
例如,SQL Developer接受密码和连接设置作为单独的字段; 它不会尝试解析您输入的字符串以识别其组件,因此不会混淆.即使您告诉SQL Developer使用TNS别名进行连接,它也会使用tnsnames.ora您从其下拉列表中选择的值,它不会尝试从用户或密码字段中获取它.