如何将 PDB 插入 Oracle12c 容器数据库

Summary: 我们的目标是提供各种解决方案,通过提供数据库解决方案、自定义开发、动态数据中心、灵活计算,从而简化IT

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

适用对象: 
数据库:Oracle 12cR1

作者:
Mahesh Reddy

问题: 
如何将 PDB 插入 Oracle12c 容器数据库?

解决方案: 
您可以通过以下方式创建可插拔数据库:
  • 使用 seed 创建新的 PDB。
  • 通过克隆现有 PDB 创建新的 PDB
  • 将拔下的 PDB 插入 CDB
  • 从 12c 非 CDB 创建新的 PDB
1.使用 seed 创建新的 PDB:

使用 SEED 数据库创建 PDB。此方法将与 seed 关联的文件复制到新位置并关联到新的 PDB。您可以使用 create pluggable database 语句从 SEED 轻松创建新的 PDB。

您可以指定以下子句,以不同的方式从 SEED 创建新的 PDB:
  • Storage:您可以指定存储限制
  • Default Tablespace:这将创建一个小型文件表空间,并将其分配给非系统用户。
  • path_prefix:它指定绝对路径
  • file_name_convert:它指定源文件中 PDB 文件的新位置。
  • Tempfile reuse:它指定从目标位置重用 tempfile。
  • Roles:要授予 PDB_DBA 角色的预定义 Oracle 角色。
SLN310932_zh_CN__1icon :ROLES 子句仅可在从 seed 创建 PDB 时使用。

示例:1

Sql> Create pluggable database PDBNAME admin user PDBUSR identified by PASSWORD;

上面的语句使用本地用户 PDBUSR 创建 PDB。  此语句将 PDB_DBA 角色授予给 PDB 管理员“pdbusr”,并将指定的预定义 Oracle 角色本地授予给 PDB 中的 PDB_DBA 角色。

示例:2                              

Sql> Create pluggable database PDBNAME admin user pdbusr identified by PASSWORD storage (MAXSIZE 5G) default tablespace USERS datafile ‘+DATA_NEW’ size 100M autoextend on path_prefix = ‘+DATA_NEW’ file_name_convert = (‘+DATA’,’DATA_NEW’);

上面的语句创建具有有限大小的 pdb,它指定属于 PDB 的所有表空间不得超过 5gb,并在新位置“+DATA_NEW”中为非管理员用户创建默认表空间用户。 

2.  通过克隆现有 PDB 创建新的 PDB:

克隆生产数据库是一种通用技术,用于开发和测试对应用程序和关联环境所做的更改。在生产环境中安装新的操作系统版本、存储软件或应用程序版本之前,需要使用生产数据进行全面测试。通常通过将生产数据库复制到测试环境来实现此目的。

在 Oracle12c 中,您可以使用 CREATE PLUGGABLE DATABASE 语句克隆 PDB。此语句克隆源 PDB 并将克隆插入相同的 CDB 或远程 CDB。

CREATE PLUGGABLE DATABASE 语句将与源 PDB 关联的文件复制到新位置并将文件与目标 PDB 关联。

不同类型的子句:

1.       使用 No 子句克隆本地 PDB

No 子句表示无结构更改。

示例:sql> create pluggable database clone_pdb from pdb;

此处,clone pdb 在默认磁盘组中使用相同的大小和相同的角色及不同的 GUID 创建。

2.       使用 PATH_PREFIX 和 FILE_NAME_CONVERT 子句克隆本地 PDB

需要 FILE_NAME_CONVERT 子句来指定所复制文件的目标位置。在此示例中,将文件从一个位置复制到另一个位置。

示例:  sql> create pluggable database clone_pdb from pdb PATH_PREFIX= '+BRLOAD’ FILE_NAME_CONVERT = ('+DATA','+BRLOAD');

在此,源 pdb 数据文件存储在“+ DATA”磁盘组中,clone pdb datafiles 置于不同的磁盘组“+BRLOAD”中,您可以使用 FILE_NAME_CONVERT 子句将数据文件位置从“+DATA”转换为“+BRLOAD”。

3.       使用 FILE_NAME_CONVERT 和 STORAGE 子句克隆本地 PDB。

必须为 PDB 强制实施存储限制。因此,STORAGE 子句是必需的。具体而言,属于 PDB 的所有表空间不得超过 2gb,并且共享临时表空间中的 PDB 会话所使用的存储不得超过 100 兆字节。

示例:sql> create pluggable database clone_pdb from pdb FILE_NAME_CONVERT= ('+DATA','+BRLOAD') STORAGE (MAXSIZE 2G MAX_SHARED_TEMP_SIZE 100M);

 克隆本地 PDB 的步骤:

本部分介绍克隆本地 PDB。克隆本地 PDB 后,源和目标 PDB 位于同一 CDB 中。

您可以使用以下步骤克隆 PDB:

第 1 步:检查源 pdb 状态

  Sql>show pdbs;

      CON_ID   CON_NAME    OPEN MODE      RESTRICTED

          2    PDB$SEED       READ ONLY   NO

          3    PDB1           READ WRITE  NO

 要克隆的 PDB 必须处于 READ ONLY 状态,如果它以 READ WRITE 模式存在,请使用以下命令更改状态

Sql> alter pluggable database pdbname close instances=all;

在此,instances=all 表示在所有节点中关闭 PDB。

Sql> alter pluggable database pdb open read only instances=all;

Sql>show pdbs;

      CON_ID   CON_NAME    OPEN MODE      RESTRICTED

          2    PDB$SEED       READ ONLY   NO

          3    PDB1           READ ONLY   NO

第 2 步:从第 2 节中提到的不同克隆子句选择所需的选项。

Sql> create pluggable database clone_pdb1 from pdb1; (no clauses)

其中,pdb1 为源,clone_pdb1 为目标

第 3 步:克隆的 PDB 将处于已装载模式,并且其状态为 NEW。您可以通过查询 CDB_PDBS 或 DBA_PDBS 视图的 STATUS 列来查看 PDB 的状态。

之后,使用 alter pluggable database 更改 pdb 的状态,然后您需要在所有节点的 tnsnames.ora 中添加 PDB 服务。

3.将 PDB 拔下并插入到 CDB:

拔下 PDB:

拔下 PDB 将取消 PDB 与 CDB 的关联。拔下操作将在 PDB 的数据文件中进行一些更改,例如记录已成功拔出 PDB。由于这仍是 CDB 的一部分,因此,已拔下的 PDB 包含在整个 CDB 的 RMAN 备份中。此类备份提供了一种简便的方法来归档已拔出的 PDB,以备将来需要时使用。必须先关闭 PDB,然后才能将其拔出。从 CDB 上拔下 PDB 时,已拔下的 PDB 处于已装载模式

拔出 PDB 的步骤:

检查源 pdb 状态

 Sql>show pdbs;

      CON_ID   CON_NAME    OPEN MODE      RESTRICTED

          2    PDB$SEED       READ ONLY   NO

          3    PDB1           READ WRITE  NO

如果源 PDB 处于读写模式,则应将 PDB 状态更改为已装载状态。

Sql> alter pluggable database PDBNAME close instances=all;

连接到根容器,然后执行以下命令

Sql> alter pluggable database pdb1 unplug into /u01/app/oracle/pdb1.xml’;

在此,将在 /u01/app/oracle 目录中创建 pdb1.xml 元数据文件。

通过使用 XML 元数据文件,您可以将 PDB 插入

3.1. 相同的 CDB

3.2. 远程 CDB

您可以使用 create pluggable database 将 PDB 插入 CDB,并使用不同子句指定 XML 文件。

不同类型的子句:

Using source_file_name_convert, no copy clause:
SOURCE_FILE_NAME_CONVERT:XML 文件不显示当前文件位置。此时我们可以使用此子句。XML 表示文件位于 +DATA 中,但是实际文件位于 +DATA1 中。

Source_file_name_convert = (‘+DATA’,’+DATA1’)

+DATA= string1   +DATA1=string2

在此,string2 文件名格式替换 string1 文件名格式。

2.       使用 path_prefix, copy, file_name_convert 子句:

PATH_PREFIX:此子句用于指定数据文件位置的绝对路径。

FILE_NAME_CONVERT:当文件不在目标位置且您希望在创建 PDB 期间复制或移动它们时,可以使用此子句。

3.       使用 FILE_NAME_CONVERT,MOVE,SOURCE_FILE_NAME_CONVERT 子句:

Xml 文件不描述当前文件位置,因此需要转换源文件名称。示例:xml 文件指明文件位于“+DATA”中,但是文件位于“/u01/app”中。

需要转换文件名,以将文件从‘/u01/app’移至‘+DATA1’。

3.1. 将拔下的 pdb 插入相同的 CDB:

必须先将 PDB 从 CDB 中拔下,才能将其重新插入相同的 CDB。

 通过不同方法,使用 XML 文件创建可插拔数据库。

a)       NOCOPY 方法

Sql>Create pluggable database pdb1 using ‘/u01/app/oracle/pdb1.xml’ nocopy;

b)      COPY 方法

Sql> Create pluggable database pdb1 using ‘/u01/app/oracle/pdb1.xml’ copy file_name_convert=(‘+DATA/pdb1/’,’+DATA1’/pdb1/’);

c)       AS CLONE MOVE 方法

Sql> Create pluggable database pdb1 as clone using ‘/u01/app/oracle/pdb1.xml’ move file_name_convert=(‘+DATA/pdb1/’,’+DATA1’/pdb1/’);

3.2.将拔下的 pdb 插入远程 CDB:

前提条件:

A)      它们必须具有相同的 endian 格式。

B)      它们必须已安装相同的数据库选项集。

源:

1.   在拔下 PDB 后,将 XML 传输到目标位置,还可以使用 ASMCMD cp 或 DATA_FILE_NAME_CONVERT 命令将数据库文件从磁盘组 (+DATA) 传输到 OS 位置 (/home/)。

2.   将数据库文件从源复制到目标操作系统位置。 

目标:

从源获取 XML 和数据库文件后,您可以使用 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 函数,以确定拔下的 pdb 是否与 TARGET CDB 兼容。

如果您获得输出“YES”,则 PDB 兼容。

如果获得输出“NO”,则 PDB 不兼容,并检查视图 PDB_PLUG_IN_VIOLATIONS 是否存在错误。

在创建远程 PDB 时,从第 3 节中选择所需子句,

示例:Sql> Create pluggable database pdbname using ‘/home/oracle/pdbname.xml’

      Source_file_name_convert = (‘+SOURCE_DATA’,’/home/oracle/datafiles’)

      移动

      File_name_convert = (‘/home/oracle/datafiles’,’+TARGET_DATA’);

说明:xml 文件针对 ASM 磁盘指定 PDB 数据文件位置,但实际文件位于 "/home/oracle" 位置。Source_file_name_convert 子句可帮助替换文件名格式,并指向实际的源位置。file_name_convert 子句可帮助将数据从操作系统位置移动到 ASM 磁盘。

4.将 12c-noncdb 迁移到 PDB:

请参阅此白皮书。
Article Properties
Article Number: 000146520
Article Type: Solution
Last Modified: 21 Feb 2021
Version:  3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.