分享知識-快樂本身:oracle12c建立用戶提示ORA-65096:公用用戶名或角色無效

今天在oracle12c上建立用戶,報錯了。以下圖:數據庫

我很鬱悶, 就打開了oracle官方網站找了下, 發現建立用戶是有限制的。c#

2.解決方案session

建立用戶的時候用戶名以c##或者C##開頭便可。oracle

錯誤寫法: create user zhaojiedi identified by oracle; 正確寫法: create user c##zhaojiedi identified by oracle;

注: 若是你不糾結爲啥的,上面的解決方案就能夠知足你的要求了,下面的內容能夠不用看了。ide

========================================================================網站

========================================================================ui

3. 解決過程spa

下面的流程是我對於這個問題的解決過程, 也寫出來分享分享。翻譯

我進入oracle 12c官方文檔的3d

依次進入如下頁面

oracle12c主頁

Administrator's Guide

Managing Users and Securing the Database

Oracle Database Security Guide

Creating User Accounts

通過一番查找,在Creating User Accounts 頁面找到了以下圖的內容:

上面提示的很明確了。 建立公共用戶名必需要以c##或者C##開頭了。咱們上面的報錯了。 就是由於咱們建立公共用戶沒用以c##或者C##開頭的。

到此咱們就知道具體錯誤的緣由了。 那就贏的解決方案就有了哈。

若是你還糾結公用用戶和本地用戶是啥東東的,Creating User Accounts 頁面就有簡介。

========================================================================

有些不明白,而後繼續查資料,緣由是這樣的:

Oracle 12C引入了CDB與PDB的新特性,在ORACLE 12C數據庫引入的多租用戶環境(Multitenant Environment)中,容許一個數據庫容器(CDB)承載多個可插拔數據庫(PDB)。

CDB全稱爲Container Database,中文翻譯爲數據庫容器,PDB全稱爲Pluggable Database,便可插拔數據庫。

在ORACLE 12C以前,實例與數據庫是一對一或多對一關係(RAC):即一個實例只能與一個數據庫相關聯,數據庫能夠被多個實例所加載。

而實例與數據庫不多是一對多的關係。當進入ORACLE 12C後,實例與數據庫能夠是一對多的關係。下面是官方文檔關於CDB與PDB的關係圖。

  

  

CDB組件(Components of a CDB)

  一個CDB數據庫容器包含了下面一些組件:

  ROOT組件:

    ROOT又叫CDB$ROOT, 存儲着ORACLE提供的元數據和Common User,元數據的一個例子是ORACLE提供的PL/SQL包的源代碼,Common User 是指在每一個容器中都存在的用戶。

  SEED組件:

    Seed又叫PDB$SEED,這個是你建立PDBS數據庫的模板,你不能在Seed中添加或修改一個對象。一個CDB中有且只能有一個Seed. 這個感念,我的感受很是相似SQL SERVER中的model數據庫。

  PDBS:

    CDB中能夠有一個或多個PDBS,PDBS向後兼容,能夠像之前在數據庫中那樣操做PDBS,這裏指大多數常規操做。

這些組件中的每個均可以被稱爲一個容器。所以,ROOT(根)是一個容器,Seed(種子)是一個容器,每一個PDB是一個容器。每一個容器在CDB中都有一個獨一無二的的ID和名稱。

怎麼查看數據庫是否爲CDB?

執行下面這條語句:    

select CDB from v$database;

若是獲得的結果爲YES,那麼就是CDB的數據庫,不然,則不是。

怎麼查看當前的容器?

執行下面這條語句:

show con_name;

執行結果以下:

  

怎麼查看CDB中的PDB信息?

執行下面這條語句:      

select con_id, dbid, guid, name , open_mode from v$pdbs;

執行結果以下: 

啓動PDB數據庫的方式:執行下面這條語句:

alter pluggable database PDBORCL open;

執行結果以下:

關閉PDB數據庫的方式:執行下面這條語句:

alter pluggable database PDBORCL close;

執行下面這條語句:

在容器間切換:

alter session set container=PDBORCL; alter session set container=CDB$ROOT;

--------------------------------------------------------------分割線------------------------------------------------------------------------

那麼說了這麼多,怎麼就能夠建立用戶而不用加c##了呢,我在這裏建立一個新的數據庫,步驟以下:

打開 Database Configuration Assistant

 

出現以下界面:

點擊「下一步」出現以下界面,在建立數據庫的時候將「建立爲容器數據庫」項取消勾選。

這樣新建立的數據庫就能夠使用了。

相關文章
相關標籤/搜索