今天闲来无事,在win10上安装了oracle12c,想着平时可以操作操作,在安装过程中有一个创建为容器数据库的勾选,虽然不明白是什么意思,我还是勾选了。
![oracle12c解决plsql登录CDB和PDB问题](/upload/otherpic64/12103(1).png)
后来在使用plsql登录的时候,发现没有scott用户,what?难道是12c取消了scott用户吗?网上转了一圈发现,原来12c引入了CDB和PDB的概念,具体内容可以自行去了解一下,这里就再详解了。现在的问题是,我正常连接的数据库是CDB,但是scott用户又是在PDB下的,我也不想去在CDB 下重新新建scott用户和相关表,所以试着去了解了下怎么用plsql直接登录到PDB,网上的方法基本是在sqlplus下切换CDB与PDB,我试了网上的方法:
1.在tns文件里添加
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdborcl.microdone.cn)
)
)
2.去sqlplus 执行
alter session set container = PDBORCL;
然后sqlplus登录就可以查到scott用户了,但是我们日常使用肯定是plsql用的比较多,plsql登录会报错:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
3.又按照网上说的方法谢了一个触发器,让pdb自动开启:
CREATE OR REPLACE TRIGGER open_all_pdbs
AFTER STARTUPON DATABASE BEGIN EXECUTE IMMEDIATE 'alter pluggable database all open';END open_all_pdbs;
登录还是报12514,好吧,先来看看这个报错能不能解决。
于是cmd窗口查看监听状态,lsnrctl status
结果是果然没有pdborcl这个监听,怎么办?继续找答案,最后才发现原来我在安装数据库的时候,全局数据库名使用的的是数据库名+域名的形式,比如我的是orcl.microdone.cn, 但是我添加的pdborcl却使用的是pdborcl,于是也改成pdborcl.microdone.cn,最后用plsql登录,perfect,完美登录,查询scott用户,查到了!!
接着我把触发器也删了,登录pdb也是没有问题的,说明直接原因还是tns配置的问题。
总结:我是在 http://www.itpub.net/thread-1847024-1-1.html 这篇文章中得到启发的,个人认为最终的原因还是在建实例的时候,CDB的global db name使用的是db name+domain的形式,而PDB使用的global db name是db name,导致在添加tns配置的时候也是只使用了db name,应该要加上domain。
但是文章中说的要配置listener.ora文件,我没有配置,还是原有的配置,这里到底需不需要配置,不是太明白,往后再研究。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle12c\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle12c\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
新闻名称:oracle12c解决plsql登录CDB和PDB问题
文章地址:
http://bjjierui.cn/article/jgjhji.html