今天上午刚安装的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;