oracle12c創建用戶和表空間出現的問題


Oracle12c 中,增加了可插接數據庫的概念,即PDB,允許一個數據庫容器(CDB)承載多個可插拔數據庫(PDB)。CDB全稱為 ContainerDatabase,中文翻譯為數據庫容器,PDB全稱為PluggableDatabase,即可插拔數據庫。在ORACLE 12C之前,實例與數據庫是一對一或多對一關系(RAC):即一個實例只能與一個數據庫相關聯,數據庫可以被多個實例所加載。而實例與數據庫不可能是一對 多的關系。當進入ORACLE 12C后,實例與數據庫可以是一對多的關系。下面是官方文檔關於CDB與PDB的關系圖。

    首先,容器數據庫創建新用戶並分配表空間時必須在沒有PDB的情況下進行或PDB與CDB有相同的表空間的時候進行,否則會報錯。如果是在PDB與CDB 有相同表空間的情況下給CDB用戶分配表空間,則分配CDB的表空間給用戶PDB的表空間並不受影響。而且,CDB用戶必須以‘C##’為開頭,否則創 建不了。如下:

1.這是在沒有PDB的情況下創建用戶“C##ukprod”並分配”USERS“(系統自帶的表空間),如果不以C##開頭的用戶名就會報錯。

2.在CDB中創建表空間TBLSPACE_OTH,而PDB中不存在該表空間,然后創建用戶默認表空間為TBLSPACE_OTH將報錯

3.在PDB中創建表空間TBLSPACE_OTH,注意文件名不能和CDB中的一樣(在不同目錄也沒關系)

3.1 show con_name   --查看當前容器

3.2 alter session set container=UKPDB1;       --轉換容器到PDB

      alter session set container=CDB$ROOT;  --轉換容器到CDB

通過查詢可知:  “C##test”  的默認表空間是容器數據庫  “CDB”  的,  跟插接式數據庫  “PDB”  一點關系都沒有。如果硬要說有關系的話就是  ”  如果 PDB中沒有表空間  ’TBLSPACE_OTH‘  的話  CDB 中的用戶就不能以  ’TBLSPACE_OTH‘  表空間做為默認表空間  ”  。

 

oracle推薦是把應用放在PDB中的,然而PDB中創建的用戶你會發現按照以前11g的方法是連接不上的,如下圖:

這是為什么呢?

原因是要寫成conn test11/test11@UKPDB1

   

這個UKPDB1是tnsName,  如下圖:    

注意這個SERVER_NAME,並不是UKPDB1,可以用lsnrctl -status查看,我在本地客戶端按照11g的慣例寫了SERVER_NAME = UKPDB1;結果怎么也連不上,在本地注意把PDB的監聽也配上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM