标签:包含 img ict dbid and spl altered mon als
??Oracle12C引入了CDB和PDB新特性,这与之前11g的情况大相径庭。但是相应的Oracle也从原来的实例与数据库之间要么是一对一的关系要么是多对一的关系(RAC就是多对一)一个数据库可以被多个实例加载。引入这两个新特性后,Oracle便可以实现一个实例对应多个数据库。与DOCKER的容器理念类似。
结构图:
??12C中官方解释
An Oracle Database installation that contains at least one PDB. A PDB appears to an Oracle Net client as a traditional Oracle database. Every Oracle database is either a CDB or a non-CDB.
每个Oracle数据库安装都至少包含了一个PDB,每个PDB对Oracle客户端而言就是传统的Oracle数据库。每一个Oracle数据库分为CBD或者非CDB的。CDB中最高层container被称为CDB$ROOT,用来创建其他PDB的模板。
In a multitenant container database (CDB), a portable collection of schemas, schema objects, and nonschema objects that appears to an Oracle Net client as a traditional Oracle database (non-CDB).
存放在多租户容器数据库(CDB)中,可以是schemas,schema对象或者nonschema对象但是对于客户端而言只是一个普通的数据库。PDB被称为PDB$SEED,CDB中可以用PDB$SEED创建多个PDB。我们真正接触比较多的是PDB,PDB相当于真正提供业务需求的数据库实例。
?
A container is a collection of schemas, objects, and related structures in a multitenant container database (CDB). Within a CDB, each container has a unique ID and name.
在CDB中容器是各种schema,对象以及相关结构的集合。在CDB中每个容器都有唯一的ID和名字。
?
For a given session, the current container is the one in which the session is running.The current container can be the CDB root, an application root, or a PDB.
Each session has exactly one current container at any point in time. Because the data dictionary in each container is separate, Oracle Database uses the data dictionary in the current container for name resolution and privilege authorization.
当前会话正在进行的地方就是当前容器,可以是CDB的根目录,应用程序的根目录或者是一个PDB。任何一个会话在某一时间节点都只有一个当前容器,因为数据字典是独立的,Oracle只能使用当前容器中的数据字典进行解析或者授权。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
CON_ID DBID NAME OPEN_MODE
---------- ---------- --------------- ----------
2 2631744085 PDB$SEED READ ONLY
3 2701353008 PDB MOUNTED
??在CDB中创建用户必须以c##开头(common),意为公有用户,无法创建本地用户。而在PDB中只能创建本地用户,在CDB中创建公有用户默认是在所有的PDB中都创建了相同的用户。这也是为什么会遇到下面这个问题:
CDB 数据库内,创建用户并指定默认表空间,报错如下:
ORA-65048: error encountered when processing the current DDL statement in
pluggable database ORCLPDB
ORA-00959: tablespace ‘test‘ does not exist
现在看来问题很简单,先在CDB下创建了表空间,但是其他pdb并没有这个表空间,而创建用户又是默认给所有pdb也创建那么一定会报找不到这个表空间的错误,解决的话去别的pdb创建相同的表空间,数据文件存放在别的地方就行了。
如果授权中不指定参数container=all,那么你进行的授权只在当前会话下有效,切换会话就会失效
标签:包含 img ict dbid and spl altered mon als
原文地址:https://www.cnblogs.com/plutozzl/p/13267795.html