首先,我们先来看一下使用dbca进行对pdb的创建。
在创建之前,我们需要检查CDB是否已经启动,如果没有启动,我们先要启动CDB。
oracle@solaris:~$ sqlplus / as sysoper
SQL*Plus: Release 12.1.0.2.0 Production on Mon Sep 8 10:16:30 2014
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Database mounted.
Database opened.
SQL> quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
oracle@solaris:~$
启动完成了。下面,我们运行dbca命令,进入如下画面。








下面,我们来看一下新创建的这个pdb的一些属性。
SQL> select name,open_mode,restricted
2 from v$pdbs
3 /
NAME OPEN_MODE RES
------------------------------ ---------- ---
PDB$SEED READ ONLY NO
PDB1 READ WRITE NO
SQL>
它是以Read Write的模式打开的,也就是说,可以对这个pdb进行读写操作。
SQL> select account_status,created,con_id
2 from cdb_users
3 where username = 'PDB_ADMIN'
4 /
ACCOUNT_STATUS CREATED CON_ID
-------------------------------- --------- ----------
OPEN 08-SEP-14 3
SQL> select account_status,created
2 from dba_users
3 where username = 'PDB_ADMIN'
4 /
no rows selected
SQL>
在创建pdb的时候,会有一个pdb管理的用户名需要输入。通过上述查询,我们发现,这个用户不属于CDB直属的用户。而这个用户真正是属于pdb下的用户。下面,我们来进行一个连接,测试一下。
SQL> conn pdb_admin/pdb_admin
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL> conn pdb_admin/pdb_admin@192.168.88.22:1521/pdb1
Connected.
SQL>
连接成功了。
下面,我们再来看一下这个用户的权限。
SQL> select granted_role,con_id
2 from cdb_role_privs
3 where grantee = 'PDB_ADMIN'
4 /
GRANTED_ROLE CON_ID
-------------------- ----------
PDB_DBA 3
SQL>
用户PDB_ADMIN拥有PDB_DBA 角色。我们来看一下这个角色有那些权限。
SQL> select privilege
2 from cdb_sys_privs
3 where con_id = 3
4 and grantee = 'PDB_DBA'
5 /
PRIVILEGE
----------------------------------------
SET CONTAINER
CREATE SESSION
CREATE PLUGGABLE DATABASE
SQL>
有这三组权限。我们再看一下直接授予的系统权限。
SQL> select privilege
2 from cdb_sys_privs
3 where con_id = 3
4 and grantee = 'PDB_ADMIN'
5 /
no rows selected
SQL>
没有,那说明,它只有上述的三种权限。。
上述是我们在创建的过程中直接接触到一些属性,关于CDB,PDB的管理,我会在后续的博客中进行说明,这里先进行一个认识。
关于PDB的一个重要的操作,我们这里也介绍一下,那就是拔去(unplug)与插入(plugin)。
同样,我们先使用dbca来进行操作。
运行dbca命令,进行如下画面。




选择要拔去的数据库,然后指定文件,这里,我们采用默认就可以,当然了,也可以改一下目录。然后点击Next。接着点击Finish,进入如下画面。

SQL> select name,open_mode,con_id
2 from v$pdbs
3 /
NAME OPEN_MODE CON_ID
------------------------------ ---------- ----------
PDB$SEED READ ONLY 2
SQL>
通过查询我们发现,它已经成功被拔去了。
下面,我们再把它插上来。同样,运行dbca命令,到如下画面。




这里,指定我们拔去的那个元数据文件与数据文件的备份。然后点击Next。


我们来查看一下。
SQL> select name,open_mode,con_id
2 from v$pdbs
3 /
NAME OPEN_MODE CON_ID
------------------------------ ---------- ----------
PDB$SEED READ ONLY 2
PDB1 READ WRITE 3
SQL>
插入成功。
下面,我们采用命令的方式进行一次创建。
SQL> create pluggable database pdb2
2 admin user pdb_admin identified by pdb_admin
3 roles=(DBA)
4 default tablespace pdb2_users
5 datafile '/u01/app/oracle/oradata/cdb12/pdb2/pdb2_users01.dbf' size 200M
6 file_name_convert = ('/u01/app/oracle/oradata/cdb12/pdbseed/','/u01/app/oracle/oradata/cdb12/pdb2/')
7 /
Pluggable database created.
SQL>
说明:pdb2为所创建pdb的名称,指定了一个默认的表空间为pdb2_users。这里有一个参数file_name_convert,它是用来进行文件的转换,也就是说,把pdbseed目录的下文件转换到pdb2目录的文件。pdbseed目录包括我们的一个pdb种子的系统文件。roles=(DBA)用来指定角色,表示把PDB_DBA角色授予pdb2的管理用户pdb_admin,
下面,我们来看一下新创建的PDB。
SQL> select name,open_mode,con_id
2 from v$pdbs
3 /
NAME OPEN_MODE CON_ID
------------------------------ ---------- ----------
PDB$SEED READ ONLY 2
PDB1 READ WRITE 3
PDB2 MOUNTED 4
SQL>
它还没有打开,下面,我们来打开一下。
SQL> alter pluggable database pdb2 open read write
2 /
Pluggable database altered.
SQL> select open_mode from v$pdbs where con_id = 4
2 /
OPEN_MODE
----------
READ WRITE
SQL>
打开完成。
查看一下用户pdb_admin的角色。
SQL> select granted_role
2 from cdb_role_privs
3 where grantee = 'PDB_ADMIN'
4 and con_id = 4
5 /
GRANTED_ROLE
--------------------------------------------------------------------------------
PDB_DBA
SQL>
有一个问题注意一下,在ASM文件系统下创建PDB,不需要file_name_convert这个参数,直接创建就是了。
下面, 我们来看个例子。
SQL> create pluggable database pdb1
2 admin user pdb1_admin identified by "pdb1_admin"
3 roles=(DBA)
4 default tablespace pdb1_users
5 datafile '+datadg' size 200M
6 /
Pluggable database created.
SQL> alter pluggable database pdb1 open read write
2 /
Warning: PDB altered with errors.
SQL> select con_id,name,open_mode
2 from v$pdbs
3 /
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 PDB1 READ WRITE
SQL>
创建完成。
我们来看一下它的数据文件,
SQL> select name from v$datafile where con_id = 3
2 /
NAME
--------------------------------------------------------------------------------
+DATADG/CDB/19BE5ECF51681E42E053020CA8AC93A4/DATAFILE/system.270.883781621
+DATADG/CDB/19BE5ECF51681E42E053020CA8AC93A4/DATAFILE/sysaux.271.883781631
+DATADG/CDB/19BE5ECF51681E42E053020CA8AC93A4/DATAFILE/pdb1_users.273.883781663
SQL> select name from v$tempfile where con_id = 3
2 /
NAME
--------------------------------------------------------------------------------
+DATADG/CDB/19BE5ECF51681E42E053020CA8AC93A4/TEMPFILE/temp.272.883781659
SQL>