【问题标题】:ORACLE - Connect to a recently created databaseORACLE - 连接到最近创建的数据库
【发布时间】:2020-09-25 03:01:46
【问题描述】:

我很绝望,我刚刚在this steps 之后创建了一个新的Oracle 数据库,系统密码为“oracle”。创建成功完成,但是当我尝试远程连接到该数据库时。

通过 SQLDeveloper 我得到一个错误

ORA-01017 invalid username/password denied

并且适用于用户 scott/tiger(手动创建并授予连接权限)。

新创建的实例是 TEST。如果我通过 sqlplus 连接 / 工作正常

$ ORACLE_SID=TEST
$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Fri Jun 5 19:32:52 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

SQL>

当我尝试连接时说用户名/密码无法连接

$ ORACLE_SID=TEST
$ sqlplus sys/oracle@TEST as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Fri Jun 5 19:35:30 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


Enter user-name: 

但听者显然知道新实例

$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 05-JUN-2020 19:37:06

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                05-JUN-2020 18:56:57
Uptime                    0 days 0 hr. 40 min. 8 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/d69dcf11a559/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=d69dcf11a559)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=d69dcf11a559)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "TEST" has 1 instance(s).
  Instance "TEST", status READY, has 1 handler(s) for this service...
Service "TESTXDB" has 1 instance(s).
  Instance "TEST", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

【问题讨论】:

    标签: database oracle listener


    【解决方案1】:

    有 2 个错误。

    1. 缺少 orapwdSID
    2. TNSNAMES.ORA(如 @littlefoot 和 @bjarte-brandt 所述)

    1. 缺少 orapwdSID

    一些教程发现 google 错过了 orapwdSID 的创建,我一创建它(遵循Burlesonndesilets)就可以通过 SQLDeveloper 进行远程连接。

    orapwd FILE="$ORACLE_HOME/dbs/orapw$ORACLE_SID" PASSWORD="$ORACLE_TEMP_PASSWORD" SYS="$ORACLE_TEMP_PASSWORD"
    

    不记得放orapwdSID文件后有没有重启数据库。

    Mind 密码必须至少包含 8 个字符,包括字符、数字和符号。您可以稍后通过 SQL 语句更改它

    echo "alter user sys identified by ${ORACLE_SYS_PASSWORD}" | sqlplus / as sysdba
    echo "alter user system identified by ${ORACLE_SYSTEM_PASSWORD}" | sqlplus / as sysdba
    

    2。 TNSNAMES.ORA

    另一方面,我发现this post reply 后面的 TNSNAMES.ORA 不见了

    $ strace sqlplus -L sys/oracle@TEST 2>&1 | grep -i 'tnsnames.ora'
    access("/home/oracle/.tnsnames.ora", F_OK) = -1 ENOENT (No such file or directory)
    access("/etc/tnsnames.ora", F_OK)       = -1 ENOENT (No such file or directory)
    access("/u01/app/oracle/product/12.2.0/SE/network/admin/tnsnames.ora", F_OK) = -1 ENOENT (No such file or directory)
    

    正如两位用户所说,@TEST 只是一个客户端别名。据我所知,客户端程序使用它来将别名转换为连接数据库的方式。

    实际上,就我而言,我并不关心通过别名 (@TEST) 进行连接,因为我可以通过 EZ_CONNECT 实现与 @bjarte-brandt 所述相同的功能。

    sqlplus sys/oracle@localhost:1521/TEST as sysdba
    

    感谢两位的帮助。

    【讨论】:

      【解决方案2】:

      @测试

      表示:在目录中查找(tnsnames.ora,ldap,more..)并解析 我的别名 TEST 到主机名和数据库 SERVICE_NAME = TEST

      配置 tnsnames 并从连接字符串中隐藏连接详细信息

      cat >> $ORACLE_HOME/network/admin/tnsnames.ora <<EOF
      TEST,YOU_CAN_NAME_IT_WHATERVER_SO_NOW_YOU_HAVE_TWO_ALIASES=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TEST)))
      EOF
      

      现在你可以连接了

      sqlplus sys/oracle@TEST as sysdba
      sqlplus sys/oracle@YOU_CAN_NAME_IT_WHATERVER_SO_NOW_YOU_HAVE_TWO_ALIASES as sysdba
      

      如果您正在做临时工作并且不想配置别名,则不必

      sqlplus sys/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db-hostname)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TEST))) as sysdba
      

      另一种选择是使用 EZ_CONNECT (host:port/SERVICE_NAME)

      sqlplus sys/oracle@localhost:1521/TEST as sysdba
      

      或者使用 TWO_TASK 环境变量:

      export TWO_TASK=localhost:1521/TEST
      sqlplus sys/oracle as sysdba
      

      祝你好运!

      【讨论】:

        【解决方案3】:

        ORA-12154日常情况中的错误会是这样的:你想打电话给某人,但不知道他们的号码,所以你拿起电话簿并搜索它但是 -没有那个人的电话号码。

        这个错误的最常见原因可能是在TNSNAMES.ORA 文件中找不到数据库别名(在你的情况下为TEST),所以 - 我建议你检查一下,如果真的是这样在这种情况下,在里面添加TEST,然后再试一次。

        请注意 - 如果您在同一台计算机上安装了多个 Oracle 产品 - 每个都有自己的 TNSNAMES.ORA电话簿,对吗?)文件,因此您可以随时添加一个新的数据库别名,您必须在每个文件中执行此操作。在这种情况下,创建一个TNS_ADMIN 环境变量,它指向包含TNSNAMES.ORA 文件的某个目录,并仅在该单个文件中维护所有更改; Oracle 会知道在哪里查看。

        【讨论】:

          猜你喜欢
          • 2015-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-18
          • 1970-01-01
          相关资源
          最近更新 更多