ORACLE-12建立使用者出現的錯誤及解決方法
在專案開發中,我們難免會遇到需要自己建立表空間,然後自己建立使用者,併為該自己建立的使用者分配自己建立的表空間為預設表空間。這個時候,有一個問題,會讓你一開始很無奈。接下來就說說我的心痛史吧。
2017-10-23日,我在汕頭。因為專案需要,我在自己使用的計算機中安裝了ORACLE-12C資料庫,並建立了表空間JLM_TAB;接著在建立使用者c##JLM_DMS,並將此使用者的預設表空間指定為剛剛建立的JLM_TAB,指定角色一般都是CONNET和DBA的前兩項。最後單擊應用的時候,報這樣的錯:在資料庫PDBORCL表空間JLM_TAB不存在。瞬間整個人完全蒙了,第一次遇到,是有點措手不及。一開始,根本沒仔細看在資料庫
其實錯誤提示將建立使用者失敗的根本原因說的很清楚,這個原因就是
明白這一點後,我們不難理解,因為我們以SYS或SYSTEM使用者登入資料庫,建立的表空間JLM_TAB其實建立在CDB使用者中。而沒有建立在PDB使用者中,所以PDB中沒有表空間JLM_TAB。此時問題便迎刃而解了。
首先按快捷鍵win+R開啟執行視窗,輸入cmd,即開啟命令提示符,在命令提示符視窗中輸入 surplus,即開啟ORACLE資料庫自帶的命令操作視窗。在此視窗中輸入 sys as sysdba,意思是ORACLE的系統管理員使用者sys 以sysdba身份或角色登入資料庫。接下來輸入密碼,特別注意的是,輸入密碼是不會顯示任何字元。不知道這一點的人還以為鍵盤壞了呢。然後就登入到ORACLE資料庫中。此時輸入 show con_name 命令,意思是檢視當前容器,此時一定會顯示CDB$ROOT,一看就明白當前容器是CDB,到這裡你應該明白之前建立的表空間JLM_TAB為什麼在CDB中了吧,以為ORACLE資料庫預設所有使用者連線到的是CDB,那麼我們現在需要的是在PDB中建立表空間JLM_TAB,而當前容器是CDB,哈哈,這個問題很好解決,ORACLE強大的命令集足以解決這個問題。接下來就是切換當前使用者sys的容器了,輸入 alter session set container=PDBORCL,此時在用show con_name命令檢視當前容器,顯示的一定是PDBORCL,即此時資料庫容器切換為PDB了。這一步一定要詳細說明下,之前我按照百度上說的,指定要切換的容器時(即該命令“=”後面的值),將該值指定為PDB$SEED,命令是執行成功,而在建立表空間的時候,又報錯:
ORA-00604:SQL遞增級 1 錯誤,
ORA-16000 : 以只讀的方式開啟PDB$SEED。
當時又是一陣頭疼,試了幾遍,依然報同樣的錯誤,後來回頭看建立使用者時報的錯,如醍醐灌頂,恍然大悟了。錯誤提示的是在資料庫PDBORCL中表空間JLM_TAB不存在,而我指定的PDB卻是PDB$SEED,這般低階錯誤,人家不報錯才怪,明白錯誤原因後,立即將PDB$SEED修改為PDBORCL,在輸入建立表空間命令,則大功告成。
create tablespace JLM_TAB
Logging
datafile ‘D:\Oracle-12c\tablespace\JLM_TAB\PDB.DBF’size 526m
autoextend on next 10m
extent management local;
需要注意的是,在CDB和PDB中的表空間要一致,但.dbf檔案的名稱不能相同,路徑可相同也可不相同。此時使用者建立一定會成功的。
最後,來補充一下,當我們擺脫ORACLE資料庫的客戶端,如何用SQL語句建立一個使用者,建立使用者的SQL語句如下所示:
CREATE USER C##DMS_OPR IDENTIFIED BY JLM2018188
DEFAULT TABLESPACE "DMS_TAB"
TEMPORARY TABLESPACE "TEMP"
特別注意:當我們使用alter session set container=pdbmorcl將資料庫切換為PDB後,有時候執行建立表空間語句時會報錯:ORA-01109: 資料庫未開啟,這個時候我們不要驚慌失措,其實出現此問題的原因就是剛從CDB切換為PDB資料庫後的PDB沒有開啟,所以就無法執行建立表空間的語句。解決方法就是將PDB開啟,其操作命令是:alter pluggable database [PDB資料庫名稱] open; 我的本地PDB的名稱是PDBMORCL,所以上述命令為:
alter pluggable database PDBMORCL open;
這次經歷雖然花費了我很多時間,但這就是每個程式設計師走過的路,每一個程式設計師都是在這些錯誤中慢慢摸索,慢慢成長起來的。也讓我明白了一個道理,以後在工作中遇到問題,首先一定不要著急,仔細看看所報的錯誤,在錯誤中發現原因,並冷靜思考,得到解決問題的方法,加油,只要有勤奮好學,努力刻苦,鍥而不捨,自律自信的精神,你的優秀是早晚的事。