新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
oracle12c解決plsql登錄CDB和PDB問題
今天閑來無事,在win10上安裝了oracle12c,想著平時可以操作操作,在安裝過程中有一個創(chuàng)建為容器數(shù)據(jù)庫的勾選,雖然不明白是什么意思,我還是勾選了。
.png)
后來在使用plsql登錄的時候,發(fā)現(xiàn)沒有scott用戶,what?難道是12c取消了scott用戶嗎?網(wǎng)上轉了一圈發(fā)現(xiàn),原來12c引入了CDB和PDB的概念,具體內容可以自行去了解一下,這里就再詳解了?,F(xiàn)在的問題是,我正常連接的數(shù)據(jù)庫是CDB,但是scott用戶又是在PDB下的,我也不想去在CDB 下重新新建scott用戶和相關表,所以試著去了解了下怎么用plsql直接登錄到PDB,網(wǎng)上的方法基本是在sqlplus下切換CDB與PDB,我試了網(wǎng)上的方法:
1.在tns文件里添加
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdborcl.microdone.cn)
)
)
2.去sqlplus 執(zhí)行
.png)
后來在使用plsql登錄的時候,發(fā)現(xiàn)沒有scott用戶,what?難道是12c取消了scott用戶嗎?網(wǎng)上轉了一圈發(fā)現(xiàn),原來12c引入了CDB和PDB的概念,具體內容可以自行去了解一下,這里就再詳解了?,F(xiàn)在的問題是,我正常連接的數(shù)據(jù)庫是CDB,但是scott用戶又是在PDB下的,我也不想去在CDB 下重新新建scott用戶和相關表,所以試著去了解了下怎么用plsql直接登錄到PDB,網(wǎng)上的方法基本是在sqlplus下切換CDB與PDB,我試了網(wǎng)上的方法:
1.在tns文件里添加
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdborcl.microdone.cn)
)
)
2.去sqlplus 執(zhí)行
alter session set container = PDBORCL;
然后sqlplus登錄就可以查到scott用戶了,但是我們日常使用肯定是plsql用的比較多,plsql登錄會報錯:
ORA-12514: TNS: 監(jiān)聽程序當前無法識別連接描述符中請求的服務
3.又按照網(wǎng)上說的方法謝了一個觸發(fā)器,讓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窗口查看監(jiān)聽狀態(tài),lsnrctl status
結果是果然沒有pdborcl這個監(jiān)聽,怎么辦?繼續(xù)找答案,最后才發(fā)現(xiàn)原來我在安裝數(shù)據(jù)庫的時候,全局數(shù)據(jù)庫名使用的的是數(shù)據(jù)庫名+域名的形式,比如我的是orcl.microdone.cn, 但是我添加的pdborcl卻使用的是pdborcl,于是也改成pdborcl.microdone.cn,最后用plsql登錄,perfect,完美登錄,查詢scott用戶,查到了?。?/pre>
接著我把觸發(fā)器也刪了,登錄pdb也是沒有問題的,說明直接原因還是tns配置的問題。總結:我是在 http://www.itpub.net/thread-1847024-1-1.html 這篇文章中得到啟發(fā)的,個人認為最終的原因還是在建實例的時候,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問題
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/jgjhji.html