ORACLE - 连接到最近创建的数据库

3

我非常着急,我按照这些步骤创建了一个新的 Oracle 数据库,并使用 sys 和 system 密码 "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
3个回答

2

@TEST

表示:在目录(tnsnames.ora,ldap等)中查找并解析我的别名TEST,获取主机名和数据库服务名=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(主机:端口/服务名称)
sqlplus sys/oracle@localhost:1521/TEST as sysdba

或者利用TWO_TASK环境变量:

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

祝你好运!


1
< p > ORA-12154 错误在日常生活中可能会出现这样的情况:你想打电话给某个人,但不知道他们的号码,所以你拿起电话簿查找,但是 - 没有那个人的号码。

也许这种错误最常见的原因是数据库别名 (TEST 在你的情况下) 在 TNSNAMES.ORA 文件中找不到,所以 - 我建议你检查一下,如果确实是这种情况,请将 TEST 添加到其中并重试。

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


0

出现了2个错误。

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

1. 缺少orapwdSID

在谷歌上找到的一些教程缺少创建orapwdSID的步骤,但是我按照Burlesonndesilets的方法创建后,就能够通过SQLDeveloper远程连接了。

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

我不记得在放置orapwdSID文件后是否重新启动了数据库。

注意:密码必须至少包含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

另一方面,我发现缺少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)连接,因为我可以像@bjarte-brandt所说的那样通过EZ_CONNECT实现相同的功能。

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

非常感谢你们的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接