分享知識-快樂自己:oracle12c創建用戶提示ORA-65096:公用用戶名或角色無效
今天在oracle12c上創建用戶,報錯了。如下圖:
我很郁悶, 就打開了oracle官方網站找了下, 發現創建用戶是有限制的。
2.解決方案
創建用戶的時候用戶名以c##或者C##開頭即可。
錯誤寫法: create user zhaojiedi identified by oracle;
正確寫法: create user c##zhaojiedi identified by oracle;
註: 如果你不糾結為啥的,上面的解決方案就可以滿足你的要求了,下面的內容可以不用看了。
========================================================================
========================================================================
3. 解決過程
下面的流程是我對於這個問題的解決過程, 也寫出來分享分享。
我進入oracle 12c官方文檔的
依次進入以下頁面
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
出現如下界面:
點擊“下一步”出現如下界面,在創建數據庫的時候將“創建為容器數據庫”項取消勾選。
這樣新創建的數據庫就可以使用了。
分享知識-快樂自己:oracle12c創建用戶提示ORA-65096:公用用戶名或角色無效