多租户环境中PDB的创建和配置
在一个CDB环境中,你可以通过种子库来创建pdb,克隆一个已存在的pdb或者non-cdb,从CDB上插入和拔下pdb,也可以将CDB上的pdb拔下或删除。
创建PDB
根据上图可以看到创建PDB有非常多种方法,也有非常多的参数可供选择,我这里只写一些比较常用的,详细使用命令参考官方文档。
通过种子库创建pdb时,我们只需要告诉oracle在哪里存放文件即可,其他的选项就不一一说明
一般设置目录时有4个选项可供使用
短语或参数 | 优先级 | 是否通过OMF创建文件 |
---|---|---|
FILE_NAME_CONVERT 短语 | 1 | No |
CREATE_FILE_DEST 短语 | 2 | Yes |
DB_CREATE_FILE_DEST 参数 | 3 | Yes |
PDB_FILE_NAME_CONVERT 参数 | 4 | No |
上面的表格只适用于通过CREATE PLUGGABLE DATABASE
语句创建的pdb的files,当pdb创建完以后生成的数据文件可以使用OMF也可以不。
当在CREATE PLUGGABLE DATABASE
语句中同时指定FILE_NAME_CONVERT
和CREATE_FILE_DEST
时,创建pdb所用到的数据文件会使用FILE_NAME_CONVERT
参数,而CREATE_FILE_DEST
参数则会被用于设置新PDB的DB_CREATE_FILE_DEST
参数,在这样的情况下,等到pdb创建完毕以后oracle会控制数据文件的命名和存放位置。
使用OMF
1 | ALTER SYSTEM SET db_create_file_dest = '/u01/app/oracle/oradata'; |
采用CREATE_FILE_DEST参数
1 | CREATE PLUGGABLE DATABASE pdb2 ADMIN USER xb IDENTIFIED BY xb |
采用FILE_NAME_CONVERT短语
1 | CREATE PLUGGABLE DATABASE pdb2 ADMIN USER xb IDENTIFIED BY xb |
指定PDB_FILE_NAME_CONVERT参数
1 | ALTER SESSION SET PDB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/'; |
建完以后的pdb都处于mount状态,最后手动打开
1 | show pdbs; |
Unplug pdb
拔下pdb表示将pdb与CDB的关系解除,你想要迁移pdb到其他cdb、想将pdb归档做其他用途或者暂时不想使用这个pdb了,都需要拔下pdb。
想要拔下pdb,需要先连到CBD root下,通过ALTER PLUGGABLE DATABASE
语句去指定XML文件或者.pdb文件。如果你指定的是XML格式的文件,则会包含pdb拔下之后所有的元数据。SQL语句创建了XML文件,包含了在新CDB中通过CREATE PLUGGABLE DATABASE
插入pdb所需要的信息。如果你是指定的.pdb文件,则是一个压缩归档文件,其中包含了XML文件用来描述pdb的元信息和pdb所用到的其他文件,比如数据文件和密码文件等。一个.pdb文件能让你只需要拷贝一个单个压缩文件到目标cdb目录下。
pdb在拔下之前需要先关闭,当你拔下pdb时,pdb会处于mount状态下。拔下操作在数据文件中做了很多记录,比如标识pdb被成功拔下。因为它仍然是CDB的一部分,被扒下的pdb仍属于CDB的rman备份里面。这样的备份提供很方便的pdb归档作为以后用途。
1 | ALTER PLUGGABLE DATABASE pdb2 CLOSE; |
这时pdb仍然存在,只是在拷贝完XML文件和数据文件等之前不要打开。
DROP PLUGGABLE DATABASE
语句可以删除pdb,当想要转移pdb到其他cdb时或者你不再需要这个pdb时都可以用到
1 | DROP PLUGGABLE DATABASE pdb2 KEEP DATAFILES; >>>>====默认值,只会删除temp files |
Plug pdb
这个技术主要利用描述pdb的xml文件和其他相关文件,这些文件可以是多个分开的,也可以是一个单独的归档文件。
先要检查要插入的pdb和目标CDB的兼容性,通过执行DBMS_PDB.CHECK_PLUG_COMPATIBILITY
函数,pdb_descr_file
指向XML文件的完整路径,pdb_name
指定新pdb的名称,如果没有指定则与XML文件中的名称一致。
1 | SET SERVEROUTPUT ON |
如果返回值为YES,则可以顺利执行后面的步骤,否则通过PDB_PLUG_IN_VIOLATIONS
视图来检查原因。
执行插入
1 | CREATE PLUGGABLE DATABASE pdb3 USING '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml' |
有时候只是将pdb插回原来的CDB,数据文件都还在原来的位置,则可以用到NOCOPY
选项
1 | CREATE PLUGGABLE DATABASE pdb2 USING '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml' |
克隆pdb
当原来的pdb以后还有用处,但是又想以这个pdb作为模版新建一个,则需要用到AS CLONE
选项,这样就可以生成一个全新的GUID
1 | CREATE PLUGGABLE DATABASE pdb2 AS CLONE USING '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml' |
如果新建pdb的数据文件存放路径与XML记录的不一致,则需要用到SOURCE_FILE_NAME_CONVERT
参数
1 | CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' |