我有 oracle 数据库 Oracle Database 12c 企业版 12.2.0.1.0,我创建了一个名为 DEVDB 的可插拔数据库以在 Web 应用程序开发中使用它,我使用数据库配置助手创建它,在创建过程中我创建了一个用户/密码连接到该数据库,然后我修改了文件tnsnames.ora添加以下内容:
DEVDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = devdb)
)
)
使用 DBeaver 或 SQL 开发人员,我可以成功连接到 PDB,如图所示:
但是当我尝试从 sqlplus 命令行尝试连接到数据库时:
sql> conn user/password@DEVDB
我收到以下错误消息:
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Warning: You are no longer connected to ORACLE.
这是show pdbs
命令结果:
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB READ WRITE NO
4 DEVDB READ WRITE NO
我重新加载lsnrctl
了很多次并再次尝试,但我得到了同样的错误。
我希望能够从 sqlplus 命令行连接 PDB 并了解该错误的原因
请问有什么帮助吗??
可插拔数据库 (PDB) 是否在线?
连接到附加 PDB 的容器数据库。发出此 SQL 命令:
show pdbs;
这应该列出所有可插入数据库(包括种子 PDB)以及它们所处的状态。您可以通过以下命令启动 DevDB 数据库:
alter pluggable database DEVDB open;
如果可行并且数据库打开并联机,您可以通过以下方式告诉 Oracle “记住”此状态:
alter pluggable database DEVDB save state;
但是,如果数据库没有通过 alter...open 命令联机,请检查
select * from PDB_PLUG_IN_VIOLATIONS;
可能存在的问题。从您的编辑中,我看到 PDB 已启动且可用。尝试从另一台计算机连接到 DEVDB?
当您连接到容器时,您可以通过以下方式将上下文切换到 PDB
alter session set container = DEVDB;
在我的 Oracle 12 环境中,我没有在服务器的 TNSNames 文件(只是容器 DB)中明确列出 PDB。然后,在客户端 PC 上,我在 TNSNAMES 文件中列出 PDB。
在服务器上,我使用 ORACLE_SID 环境变量并且不使用@service,所以:
Set ORACLE_SID=DEVDB
然后sqlplus user/pwd
(但那是在 Windows 环境中。)