今天上午剛安裝的12c,用來一下午的時間總結出來的,不保猜測的對錯,但保證SQL能執行成功。
CDB給用戶授權表空間的SQL是從別出整理過來的,因為我是在PDB中創建,沒測試過下面代碼是否可用。
alter user C##truedata quota unlimited onTRUEDATA;
這層目錄應該是CDB,圈住的是PDB,他們都有各自的表空間。
下面這段話是看到一個大神的話,他應該看了不少oracle相關的書。
oracle啟動的時候,讀取ctl文件(叫控制文件),這個控制文件里記錄的內容告訴oracle目前這個數據庫都是由哪些dbf組成的。然后讀取所有的dbf文件,看這些dbf文件的最后修改時間是否和控制文件中記錄的一樣(同事還要比對日志文件中記錄的最后修改時間),如果這些文件的最后修改時間都一致,那么說明oracle上次關閉是正常的,假如不一致,則利用日志文件重現之前的操作(日志文件里記錄oracle的所有操作),最終時所有類型的文件的最后修改時間一致,然后打開,相信你已經看出來了,如果ctl文件壞了的話,你的數據實際上全都無法讀取,因為oracle已經不知道自己的結構了。因此oracle默認將控制文件復制3份保存,足見其重要性。
因為估計你沒有看過書,所以我用了淺顯易懂的詞來描述,他們在oracle中應該叫:
最后修改時間: SCN(System Change Number)
日志文件:redo log(可能還涉及到Archive 歸檔文件)
重現操作:roll forward (前滾)(實際上發生SCN不一致時需要進行恢復,在前滾后還要回滾)
用system用戶操作選擇PDB要選擇ORCLPDB,PDB$SEED的模式是只讀,無法創建表空間:ORA-00604, ORA-16000: 打開數據庫以進行只讀訪問
--查看CDB容器中包含的PDB容器
select con_id,dbid,guid,name,open_mode fromv$pdbs;--CDB和PDC切換
alter session set container=ORCLPDB;alter session set container=CDB$ROOT;
show con_name--查看當前容器
--創建臨時表空間
create temporarytablespace TRUEDATA_TEMP
tempfile'D:\Tools\Oracle_12C\oradata\mhyorcl\orclpdb\TRUEDATA_TEMP.DBF'size 32m
autoextendon
next32m maxsize 2048m
extent management local;--創建表空間
createtablespace TRUEDATA
logging
datafile'D:\Tools\Oracle_12C\oradata\mhyorcl\orclpdb\TRUEDATA.DBF'size 32m
autoextendon
next32m maxsize 2048m
extent management local;--CDB中給用戶授權表空間 CDB創建用戶需加上c##(c大小寫無所謂)
create user C##truedata identified by 1234;alter user C##truedata quota unlimited onTRUEDATA;--PDB創建用戶並指定表空間
create user truedata identified by 1234
defaulttablespace TRUEDATAtemporarytablespace TRUEDATA_TEMP;--給用戶授予權限
grant connect,resource,dba totruedata;
--刪除用戶
drop user truedata cascade;--刪除表空間包括物理
drop tablespace truedata_temp including contents anddatafiles;drop tablespace truedata including contents and datafiles;
用plsql連接,還需要配置D:\Tools\Oracle_12C\product\12.2.0\dbhome_1\network\admin\tnsnames.ora,新建ORCPDB。
--連接可插拔PDB出現:ORACLE 正在初始化或關閉。執行一下SQL,--orclpdb :PDB名字
alter pluggable database orclpdb open;