基本概念:
Multitenant Environment:多租户环境
CDB(Container Database):数据库容器
PD(Pluggable Database):可插拔数据库
CDB与PDB关系图
COMMON USERS(普通用户):经常建立在CDB层,用户名以C##或c##开头;
LOCAL USERS(本地用户):仅建立在PDB层,建立的时候得指定CONTAINER。
在oracle 12c中,使用了一个container(容器)的概念,让我们先看看官方的对它的介绍,为了保留最原始的意思,这里引用英文而不翻译了。
The data dictionary in each container in a CDB is separate, and the current container is the container whose data dictionary is used for name resolution and for privilege authorization. The current container can be the root or a PDB. Each session has exactly one current containerat any point in time, but it is possible for a session to switch from one container to another.
Each container has a unique>
1 Container Database (CDB)
对于CDB,启动和关闭与之前传统的方式一样,具体语法如下:
STARTUP[NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]
SHUTDOWN[IMMEDIATE | ABORT]
要注意,在12c数据库创建完成后,默认情况下使用sqlplus / as sysdba 登录连接的是CDB。
a、查看容器库和插件库名
SQL>select name,pdb from v$services;
或只查看插件库
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
b、切换到指定的库
SQL>>
会话切换之后,操作的具体语法和普通实例一样:
2.2 使用ALTER PLUGGABLE DATABASE命令
如果在PDB中可以使用如下语法:
ALTER PLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];
ALTER PLUGGABLE DATABASE CLOSE [IMMEDIATE];
如果是在CDB中,可以使用如下语法:
ALTER PLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED][FORCE];
ALTER PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];
ALTER PLUGGABLE DATABASE CLOSE [IMMEDIATE];
但这里可以通过触发器来实现PDB的自动open:
在容器库中已sys登录创建如下触发器
CREATEOR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTERPLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/
常用的sql:
--1、查看Oracle 12c的版本
SELECT * FROM V$VERSION;
--2、查看当前会话连接的数据库
select sys_context ('USERENV', 'CON_NAME') from dual;
或:
SQL> show con_name
--3、查看容器库和插件库名
SQL>select name,pdb from v$services;
或只查看插件库
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
--4、将容器库打开
SQL>>
--5、切换到指定的库
SQL>>
--5、查看会话丽娜姐的库
SQL> select sys_context('USERENV','CON_NAME') from dual;
--7、在插件库中创建用户,和以前版本一样的语法;
SQL> create user t1> SQL> grant dba to t1;
--8、关闭插件库
SQL> shutdown immediate
--9、在容器库中创建用户;
SQL> create user c##t> 在容器数据库中就可查询了;
select * from dba_users u where u.USERNAME='C##T';