如何将 PDB 插入 Oracle12c 容器数据库
Resumen: 我们的目标是提供各种解决方案,通过提供数据库解决方案、自定义开发、动态数据中心、灵活计算,从而简化IT
Este artículo se aplica a
Este artículo no se aplica a
Este artículo no está vinculado a ningún producto específico.
No se identifican todas las versiones del producto en este artículo.
Síntomas
适用对象:
数据库:Oracle 12cR1
作者:
Mahesh Reddy
问题:
如何将 PDB 插入 Oracle12c 容器数据库?
解决方案:
您可以通过以下方式创建可插拔数据库:
使用 SEED 数据库创建 PDB。此方法将与 seed 关联的文件复制到新位置并关联到新的 PDB。您可以使用 create pluggable database 语句从 SEED 轻松创建新的 PDB。
您可以指定以下子句,以不同的方式从 SEED 创建新的 PDB:
注: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:
请参阅此白皮书。
数据库:Oracle 12cR1
作者:
Mahesh Reddy
问题:
如何将 PDB 插入 Oracle12c 容器数据库?
解决方案:
您可以通过以下方式创建可插拔数据库:
- 使用 seed 创建新的 PDB。
- 通过克隆现有 PDB 创建新的 PDB
- 将拔下的 PDB 插入 CDB
- 从 12c 非 CDB 创建新的 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 角色。
注: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:
请参阅此白皮书。
Propiedades del artículo
Número del artículo: 000146520
Tipo de artículo: Solution
Última modificación: 21 feb 2021
Versión: 3
Encuentre respuestas a sus preguntas de otros usuarios de Dell
Servicios de soporte
Compruebe si el dispositivo está cubierto por los servicios de soporte.