编辑手记:在Oracle12.2 中提供了多种创建PDB的方式,能够更快速便捷地实现数据库的扩展和变更。今天我们来介绍通过SQL*Plus管理的方式。
注:文档内容来自于官方文档翻译,想了解更多信息请参阅官方文档。
1
PDB的创建
在创建PDB之前,需要满足以下条件:
通过SQL*Plus 的方式创建PDB共有以下几种方式。
Creating a PDB Using the Seed
可以使用CREATE PLUGGABLE DATABASE语句在CDB中使用CDB seed的文件创建PDB。
实现过程如下:
还可以使用此语句在application container中使用application seed或CDB seed的文件创建application PDB。
实现过程如下:
两种方式的使用场景:
当application container包含application seed时,并且在application root目录中运行CREATE PLUGGABLE DATABASE语句以从seed创建 application PDB时,将使用应用程序种子application seed 创建 application PDB。 但是,当application container不包含application seed,并且在application root 目录中运行CREATE PLUGGABLE DATABASE语句以从seed 创建 application PDB时,将使用CDB种子(PDB $ SEED)创建 application PDB。
创建步骤
登录SQL *Plus,确保当前容器是CDBroot或者application root
对于CDB root,使用CDB root的文件在CDB中创建PDB;
对于application root,使用application root的文件创建PDB;
对于没有application root的容器,都使用CDB root的文件在CDB中创建PDB
运行CREATE PLUGGABLE DATABASE语句,并为PDB指定本地管理员。
创建PDB后,它处于mount模式,其状态为NEW。 可以通过查询V$ PDBS视图中的OPEN_MODE列来查看PDB的打开模式。 通过查询CDB_PDBS或DBA_PDBS视图的STATUS列来查看PDB的状态。
该过程PDB有一个新的默认服务被创建。该服务与PDB具有相同的名称,可用于访问PDB。 必须为客户端正确配置Oracle Net Services才能访问此服务
将创建好的PDB以read/write模式打开
必须以read/write模式为Oracle数据库打开新的PDB,以完成新PDB到CDB的集成。 如果尝试在read only模式下打开PDB,则会返回错误。 在read/write模式下打开PDB后,其状态为NORMAL。
备份新 建的PDB
只有完成备份才能实现必要的恢复
最简单的创建语法:
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password;
预定义PDB管理员的创建语法:
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password ROLES=(DBA);
指定存储、表空间、文件位置等相关内容的创建语法:
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password
STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE sales DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');
Creating a PDB by Cloning an Existing PDB or Non-CDB
可以使用CREATE PLUGGABLE DATABASE语句从源PDB或从非CDB克隆PDB。通过克隆,将源PDB或非CDB克隆为新的PDB,并自动将克隆插入CDB。要使用该技术,需要在创建语句中包含有from子句指定源。
源可以是本地CDB中的PDB,远程CDB中的PDB或Non-CDB。 CREATE PLUGGABLE DATABASE语句将与源关联的文件复制到新位置,并将文件与目标PDB关联。 当CDB处于ARCHIVELOG模式和本地撤消模式时,源PDB可以在读/写模式下打开,并在操作期间完全起作用。 因此支持热PDB克隆。
克隆的一个用途是测试。 通过克隆,可以创建一个或多个PDB或Non-CDB,并单独安全地进行测试。 例如,在将application与production PDB一起使用之前,可以在克隆的PDB上测试新的application或修改过的的application。
本地PDB的克隆
远程PDB的克隆
若源PDB在远程CDB中,必须使用DBlink克隆PDB,在CDB中创建包含克隆的PDB的DBlink。
从包含新PDB的CDB root目录发出CREATE PLUGGABLE DATABASE语句时,必须指定到包含正在FROM子句中克隆PDB的远程CDB的DBlink。 DBlink连接到远程CDB的根目录,或从包含新PDB的CDB连接到远程源PDB。
Non-CDB的克隆
当源为Non-CDB时,必须在FROM子句中指定指向非CDB的DBlink。
在所有克隆方案(本地,远程和Non-CDB)中,当application root目录是运行CREATE PLUGGABLE DATABASE语句时的当前容器时,将在application container中创建克隆的PDB。 在这种情况下,源PDB的application名称和版本必须与克隆的应用程序名称和应用程序容器的版本相匹配。
application container中PDB的克隆
如果目标CDB没有具有相同名称的公共用户,则该用户帐户被锁定在目标PDB中。 对于每个锁定的用户,可以选择以下选项处理:
1、关闭PDB,连接到根目录,并创建具有相同名称的公共用户。 当PDB在读/写模式下打开时,共同授予用户的角色和特权的差异将得到解决,可以解锁用户。 在此过程中,本地授予用户的权限和角色保持不变。 2、在PDB中创建新的本地用户,并使用数据泵将锁定的用户数据导出/导入到新的本地用户模式中。 3、保留用户锁定。 4、删除用户。
Creating a PDB by Relocating It
可以使用CREATE PLUGGABLE DATABASE语句将PDB从一个CDB重定位到另一个CDB。必须包括指定PDB的当前位置的FROM子句;包括RELOCATE子句以指定正在移动PDB而不是克隆。在操作完成之后,PDB被添加到PDB被重定位到的CDB。使用这种技术是以最少停机时间重定位PDB的最快方式,被重定位的PDB可以在读/写模式下打开并且在重定位过程期间完全起作用。
第一种情况,在CDB之间relocate PDB。
第二种情况是relocate 一个PDB到application container。
当PDB重新定位时,有以下两个选项:AVAILABILITY MAX和AVAILABILITY NORMAL。使用AVAILABILITY MAX子句将连接从PDB的旧位置重定向到新位置。
也可以通过以下的间接方式将连接从PDB的旧位置重定向到新位置。
第三种情况是从远端CDB relocate PDB。
在这种情况下,运行CREATE PLUGGABLE DATABASE语句时,新PDB所属的root取决于当前容器:
Creating a PDB by Plugging an Unplugged PDB into a CDB
该技术使用描述PDB的XML元文件和相关的数据库文件将PDB插入到CDB中。这些文件可以单独使用,也可以压缩为一个.pdb后缀的文件。如以下两种情况:
第二种情况,将PDB插入到application root。如下图所示:
可以使用CREATE PLUGGABLE DATABASE语句插入PDB,必须包括一个USING子句,指定描述PDB或.pdb归档文件的XML元文件。源CDB是从其拔下PDB的CDB。 目标CDB是要插入PDB的CDB。 源CDB和目标CDB可以是相同的CDB或不同的CDB。
插入步骤如下:
1、登录SQL*Plus,确保当前的容器是目标CDB或者目标application container。 若当前容器是目标CDB root的时候,会创建PDB并插入CDB,若当前容器是application container,则会创建相应的application PDB。 2、执行DBMS_PDB.CHECK_PLUG_COMPATIBILITY包,确保PDB与CDB兼容; 3、如果PDB还未从源CDB拔下,先拔下来。 4、执行 CREATE PLUGGABLE DATABASE包,使用Using语句指定XML元文件、.pdb归档文件及其他相关参数。 5、将新的PDB以read/write模式打开 6、对新的PDB进行备份。
Creating a PDB as a Proxy PDB
代理PDB提供对远程CDB中的另一个PDB的访问。可以使用CREATE PLUGGABLE DATABASE语句通过引用其他PDB来创建代理PDB。
当需要远程PDB的本地上下文环境时,可以使用代理PDB。 另外,当不同CDB中的application container具有相同的application时,它们的application 肉体可以与代理PDB保持同步。
代理PDB创建图解如下:
第二种情况,创建application container中的代理PDB
在创建代理PDB的过程中,始终需要DBlink。创建完成之后,该DBlink不再被使用,代理PDB直接与被引用的PDB通信。
直接通信需要包含引用的PDB的CDB的侦听器的端口号和主机名,默认情况下,代理PDB使用以下值:
如果引用的PDB的侦听器不使用默认端口号,则必须使用PORT子句指定侦听器的端口号。 您可以在创建代理PDB时指定端口号,也可以更改代理PDB以更改端口号。
如果引用的PDB的侦听器不使用默认主机名,则必须使用HOST子句指定侦听器的主机名。 您可以在创建代理PDB时指定主机名,也可以更改代理PDB以更改主机名。
Creating a PDB Using a Non-CDB
使用Non-CDB创建PDB的时候,有以下几种方式:
1、通过创建Non-CDB的库创建PDB
该方法是使用Non-CDB创建PDB的最简单的方法,但它需要将Non-CDB的文件复制到新位置。前提条件是无论是Non-CDB还是将要用于PDB插入的新的CDB,必须是12.1或者更新的版本。
2、使用DBMS_PDB的包创建XML元文件
XML元文件描述Non-CDB的数据库文件,此方法需要比通过克隆Non-CDB创建PDB更多的步骤,但它允许在某些情况下使用Non-CDB创建PDB而不移动Non-CDB文件。
3、使用Oracle DataPump 的导入的导出功能创建PDB。
从一个Non-CDB中导出相关文件,并导入到PDB中,在执行导入时,在用户名后面指定PDB的连接标识符。 例如,如果PDB的连接标识符是hrpdb,则在运行Oracle Data Pump Import实用程序时输入以下内容:
impdp user_name@hrpdb ...
4、通过ogg复制创建PDB
将来自Non-CDB的数据复制到PDB, 当新建的PDB与源Non-CDB同步时,可以故障转移到PDB。
2
将PDB从CDB中拔出
要拔出PDB,需要连接到其CDB root或application root目录,并使用ALTER PLUGGABLE DATABASE语句指定XML文件或.pdb文件。
该过程图解如下:
第二种情况,从application container中拔出:
必须关闭PDB,然后才能出。 当拔下PDB时,同一CDB中的其他PDB处于mount模式。 拔除操作会在PDB的数据文件中进行一些更改以记录。 因为它仍然是CDB的一部分,所以被拔出的PDB包含在整个CDB的RMAN备份中。以备将来需要时使用。
当然,也可以从CDB中完全删除PDB。 在拔出的PDB上支持的唯一操作是 dropping PDB。如果需要将PDB插回到同一个CDB中, 必须先从CDB中删除该PDB,并且 PDB只有在插入CDB时才可用。
在Drop PDB的过程中,可以使用一下语句指定要不要保留PDB的文件。
1、keep datafiles选项保留PDB的文件 2、Including datafiles则将PDB文件一起从CDB磁盘中删除。
Oracle 12.2新特性掌上手册系列