多租户环境中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_CONVERTCREATE_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
2
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER xb IDENTIFIED BY xb
CREATE_FILE_DEST='/u01/app/oracle/oradata';

采用FILE_NAME_CONVERT短语

1
2
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER xb IDENTIFIED BY xb
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/');

指定PDB_FILE_NAME_CONVERT参数

1
2
3
ALTER SESSION SET PDB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/';

CREATE PLUGGABLE DATABASE pdb2 ADMIN USER xb IDENTIFIED BY xb;

建完以后的pdb都处于mount状态,最后手动打开

1
2
3
show pdbs;

ALTER PLUGGABLE DATABASE pdb2 OPEN READ WRITE;

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
2
3
4
5
6
7
ALTER PLUGGABLE DATABASE pdb2 CLOSE;

-- XML 文件
ALTER PLUGGABLE DATABASE pdb2 UNPLUG INTO '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml';

-- .pdb文件
ALTER PLUGGABLE DATABASE pdb2 UNPLUG INTO '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.pdb'; >>>>====只是后缀不一样

这时pdb仍然存在,只是在拷贝完XML文件和数据文件等之前不要打开。

DROP PLUGGABLE DATABASE语句可以删除pdb,当想要转移pdb到其他cdb时或者你不再需要这个pdb时都可以用到

1
2
3
DROP PLUGGABLE DATABASE pdb2 KEEP DATAFILES;        >>>>====默认值,只会删除temp files

DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

Plug pdb

这个技术主要利用描述pdb的xml文件和其他相关文件,这些文件可以是多个分开的,也可以是一个单独的归档文件。

先要检查要插入的pdb和目标CDB的兼容性,通过执行DBMS_PDB.CHECK_PLUG_COMPATIBILITY函数,pdb_descr_file指向XML文件的完整路径,pdb_name指定新pdb的名称,如果没有指定则与XML文件中的名称一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml',
pdb_name => 'NEW_PDB')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/

如果返回值为YES,则可以顺利执行后面的步骤,否则通过PDB_PLUG_IN_VIOLATIONS视图来检查原因。

执行插入

1
2
CREATE PLUGGABLE DATABASE pdb3 USING '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml'
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2/','/u01/app/oracle/oradata/cdb1/pdb3/');

有时候只是将pdb插回原来的CDB,数据文件都还在原来的位置,则可以用到NOCOPY选项

1
2
3
CREATE PLUGGABLE DATABASE pdb2 USING '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml' 
NOCOPY
TEMPFILE REUSE;

克隆pdb

当原来的pdb以后还有用处,但是又想以这个pdb作为模版新建一个,则需要用到AS CLONE选项,这样就可以生成一个全新的GUID

1
2
3
CREATE PLUGGABLE DATABASE pdb2 AS CLONE USING '/u01/app/oracle/oradata/cdb1/pdb2/pdb2.xml' 
NOCOPY
TEMPFILE REUSE;

如果新建pdb的数据文件存放路径与XML记录的不一致,则需要用到SOURCE_FILE_NAME_CONVERT参数

1
2
3
4
5
CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' 
SOURCE_FILE_NAME_CONVERT = ('/disk1/oracle/sales/', '/disk2/oracle/sales/')
NOCOPY
STORAGE (MAXSIZE 2G)
TEMPFILE REUSE;

多租户环境中PDB的创建和配置
https://www.xbdba.com/2019/04/30/create-and-configuration-pdb-in-multitenant/
作者
xbdba
发布于
2019年4月30日
许可协议