无法使用SID连接到Oracle数据库

3
我对Oracle数据库设置完全是新手。因此,我下载并运行了以下OracleVM。为了满足我的项目特定需求,我执行了几个步骤来创建表空间和具有适当权限的用户/模式,如下所示:
  1. create tablespace MYTABLESPACE datafile 'linux/path/MYTABLESPACE.DBF' size 4096m autoextend on next 512m maxsize 8192m;
  2. create user MYUSER identified by MYUSER default tablespace MYTABLESPACE;
  3. grant connect, resource, unlimited tablespace, select any dictionary to MYUSER;
默认配置文件存储在$ {ORACLE_HOME}/network/admin中。

listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orclcdb)
      (SID_NAME = orclcdb)
      (ORACLE_HOME = /u01/app/oracle/product/version/db_1)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    )
  )

#HOSTNAME by pluggable not working rstriction or configuration error.
DEFAULT_SERVICE_LISTENER = (orclcdb)

tnsnames.ora

ORCLCDB=localhost:1521/orclcdb ORCL=  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )   )

使用上述配置,我无法使用SID连接到新创建的用户,请参见下表。

password

在这种情况下,会收到以下错误:
[72000][1017] ORA-01017: 无效的用户名/密码;登录被拒绝
请问有人能够澄清配置中缺少什么,因为 SID 连接是遗留应用程序的要求吗?

ORCL服务实际上是为CDB还是PDB而设的?我不确定是否可以使用SID连接到12c+数据库 - 为什么传统应用程序必须使用SID呢? - Alex Poole
@AlexPoole 我刚刚检查了一下,似乎 VM 默认使用 CDB。关于应用程序,我们有一个无法修改的遗留连接器。我尝试过使用服务名称,但不幸的是它不起作用。 - fashuser
我刚刚模拟了一个奇怪的行为, 当我使用系统用户登录并使用服务名称创建用户时,该用户可以使用服务名称登录,但无法使用SID登录。 当我使用系统用户登录并使用SID创建用户时,该用户可以使用SID登录,但无法使用服务名称登录。 - RAY
2个回答

4

默认情况下,您无法使用SID连接到PDB。您需要启用USE_SID_AS_SERVICE_listener参数才能使其工作(其中“listener”是您的监听器名称)。请参阅这个例子以及文档。由于您的监听器名称为“LISTENER”,因此您应该能够将此行添加到您的listener.ora文件末尾:

USE_SID_AS_SERVICE_LISTENER=on 

非常感谢。这正是我在寻找的内容。目前可以通过以下方式进行连接:jdbc:oracle:thin:@//localhost:1521/ORCL - fashuser
将条目放在listener.ora文件的SID_LIST_LISTENER部分之前,而不是文件末尾。 - ununiform

0

问题中的情况在逻辑上是正确的,没有任何问题。你不应该为SID和服务创建相同的普通用户,因为它们是两个独立的实例。(除非你完全确定想要在两个数据库上执行不同任务的两个相同的用户名)

我检查了数据库安装的数据库文件,有两个独立的数据库文件组位于两个不同的目录中,一个用于数据库实例(ORACLESID),一个用于数据库服务(ORACLEPDB)。

在我的Oracle数据库安装中,

服务名称是:
"ORACLEPDB",

SID是:
"ORACLESID"

以下是我的文件结构:

bash-4.2# pwd
/opt/oracle/oradata/ORACLESID
bash-4.2#  ls -hal      
total 2.5G
drwxr-x--- 1 oracle oinstall 4.0K Jan 30 02:17 .
drwxr-xr-x 1 oracle dba      4.0K Jan 30 02:26 ..
drwxr-x--- 1 oracle oinstall 4.0K Jan 30 02:26 ORACLEPDB
-rw-r----- 1 oracle oinstall  18M Jan 30 12:47 control01.ctl
-rw-r----- 1 oracle oinstall  18M Jan 30 02:53 control02.ctl
drwxr-x--- 1 oracle oinstall 4.0K Jan 30 02:19 pdbseed
-rw-r----- 1 oracle oinstall 201M Jan 30 12:47 redo01.log
-rw-r----- 1 oracle oinstall 201M Jan 30 12:41 redo02.log
-rw-r----- 1 oracle oinstall 201M Jan 30 12:41 redo03.log
-rw-r----- 1 oracle oinstall 531M Jan 30 12:46 sysaux01.dbf
-rw-r----- 1 oracle oinstall 911M Jan 30 12:46 system01.dbf
-rw-r----- 1 oracle oinstall 129M Jan 30 12:23 temp01.dbf
-rw-r----- 1 oracle oinstall 341M Jan 30 12:46 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5.1M Jan 30 12:41 users01.dbf


bash-4.2# cd ORACLEPDB/
bash-4.2# pwd
/opt/oracle/oradata/ORACLESID/ORACLEPDB
bash-4.2# ls -hal
total 742M
drwxr-x--- 1 oracle oinstall 4.0K Jan 30 02:26 .
drwxr-x--- 1 oracle oinstall 4.0K Jan 30 02:17 ..
-rw-r----- 1 oracle oinstall 331M Jan 30 12:46 sysaux01.dbf
-rw-r----- 1 oracle oinstall 271M Jan 30 12:47 system01.dbf
-rw-r----- 1 oracle oinstall  37M Jan 30 02:54 temp01.dbf
-rw-r----- 1 oracle oinstall 101M Jan 30 12:46 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5.1M Jan 30 12:41 users01.dbf

为了验证这个假设,我创建了以下用户:
在连接中使用"ORACLESID"创建"SIDUSER" enter image description here 在连接中使用"ORACLEPDB"创建"PDBUSER" enter image description here

因此,在通过"SYSTEM"作为SYSDBA用户在基于SID的连接和基于服务的连接上创建了BOTH用户之后,在"all_users"表中发生了以下情况:

在基于SID的连接中,PDBUSER不存在

 select * from all_users where username like '%USER';
 select * from global_name;

enter image description here

在基于服务名称的连接上,SIDUSER不存在。

enter image description here

这个结论是,即使你启用了配置:
USE_SID_AS_SERVICE_LISTENER=on

使用SID和Servicename连接的用户,即使使用相同的用户名和密码,在不同的数据库实例上工作,用户所做的更改在一个数据库中不会在另一个数据库中看到。


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