首先,我们先来看一下使用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命令,进入如下画面。
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/zgv3vUOgdmwIAatFJVJXtg==/6597896599402611335.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/GNeuWL8IAqw3J9qnyBUGxQ==/3303390326776712291.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/i-KozT1c50RyMvq64lGhZw==/2175801570073625213.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img0.ph.126.net/OoZQWRroZdI3-MClhv2Iuw==/4831236500361950238.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/4eihRSqZmS0_oRaRhDeILg==/1262696745624226745.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/CiuPDBeOQ2HjoMBoni04Yw==/3747839315002690466.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/VFGmGOWdpmGFxItg33OILQ==/3221762583530470712.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img1.ph.126.net/bPDX1tHNcLWtfXb6bDQzEA==/6608425522749352591.jpg)
下面,我们来看一下新创建的这个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命令,进行如下画面。
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/bxUOme6IiWI_HC_hiCdDVQ==/2990671627650977663.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img0.ph.126.net/phgFqnFEEZfj7_chWl0ZgA==/2174957145144057771.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img1.ph.126.net/O7ddVDOcJFAvpP7BX-Jp9A==/6608583852422650462.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img1.ph.126.net/15tELg7hvFoNRVvy2PUP3g==/1491817376666746777.jpg)
选择要拔去的数据库,然后指定文件,这里,我们采用默认就可以,当然了,也可以改一下目录。然后点击Next。接着点击Finish,进入如下画面。
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img1.ph.126.net/raYAEwN6ODeeoQIaBp65fA==/2464876371155680513.jpg)
SQL> select name,open_mode,con_id
2 from v$pdbs
3 /
NAME OPEN_MODE CON_ID
------------------------------ ---------- ----------
PDB$SEED READ ONLY 2
SQL>
通过查询我们发现,它已经成功被拔去了。
下面,我们再把它插上来。同样,运行dbca命令,到如下画面。
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img2.ph.126.net/BTNt54xlpXLNWfROAWWyuQ==/6608591549004044870.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img0.ph.126.net/M4XhsO_tBTALMnd8VgdYYA==/4859665473009974355.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img0.ph.126.net/vcf1JdusLIaxMbSZd59qpg==/3195022460743190865.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img0.ph.126.net/kztl4JN5ry5aAFCgWMFudw==/6608660818236593361.jpg)
这里,指定我们拔去的那个元数据文件与数据文件的备份。然后点击Next。
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img1.ph.126.net/CuI9bUMzGwWkUjCHsEz98A==/6619386554165189680.jpg)
![Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客 Oracle PDB(Pluggable Database)的创建 - 东方醉仙 - 东方醉仙 的博客](http://img0.ph.126.net/Mr9uCiKK2z-5Pqk12Wib3A==/4855443348359268858.jpg)
我们来查看一下。
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>