Oracle® Multitenant
Administrator’s Guide
Part III Creating and Removing PDBs and Application Containers
5 Overview of PDB Creation
6 Creating a PDB from Scratch
7 Cloning a PDB
8 Relocating a PDB
9 Plugging In an Unplugged PDB
10 Creating a PDB as a Proxy PDB
11 Removing a PDB
12 Creating and Removing Application Containers and Seeds
Part III创建和删除PDBs和应用程序容器
您可以使用各种技术创建pdb、应用程序容器和应用程序seeds。
例如,您可以从头开始创建PDB、克隆现有PDB或插入未插电的PDB。您还可以从CDB中删除PDB。
5 PDB创建概述
CDB支持多种创建pdb的技术。
创建的PDB自动包含一个完整的数据字典,其中包括元数据和指向CDB ROOT中系统提供的对象的内部链接。必须从单个ROOT定义每个PDB:CDB根或应用程序根。
每个PDB都有一个全局唯一标识符(GUID)。PDB GUID主要用于为存储PDB文件的目录生成名称,包括Oracle Managed Files目录和non-Oracle Managed Files目录。
5.1 创建PDB的技术
您可以使用各种技术创建PDB,所有这些技术都需要create PLUGGABLE数据库语句。
创建PDB是将其与CDB或应用程序容器关联的过程。下图描述了创建PDB的选项。
下表描述了创建技术。本手册中没有介绍的另一种技术是使用Recovery Manager中的DUPLICATE命令将PDB从一个CDB复制到另一个CDB。
表5-1创建PDB的技术
技术1:
Create a PDB from scratch
描述:
使用PDB seed或application seed的文件在CDB中创建PDB。此技术将与seed关联的文件复制到新位置,并将复制的文件与新PDB关联。这是默认的创建机制。其他技术需要源PDB或XML。
更多信息:
"Creating a PDB from Scratch"
技术2:
Clone an existing PDB
描述:
通过克隆源PDB创建PDB。源可以是本地CDB中的PDB、远程CDB中的PDB或本地或远程应用程序容器中的PDB。此技术将与源关联的文件复制到新位置,并将复制的文件与新PDB关联。
更多信息:
"Cloning a PDB"
技术3:
Relocate a PDB to a different CDB
描述:
通过将PDB从一个CDB重新定位到另一个CDB来创建PDB。此技术将与PDB相关联的文件移动到新位置。
更多信息:
"Relocating a PDB"
技术4:
Plug an unplugged PDB into a CDB
描述:
通过使用描述PDB的XML元数据文件和与PDB相关联的文件将PDB插入CDB来创建PDB。
更多信息:
"Plugging In an Unplugged PDB"
技术5:
Reference a PDB as a proxy PDB
描述:
通过使用数据库链接引用不同的PDB,将PDB创建为代理PDB。引用的PDB可以与代理PDB位于同一CDB中,也可以位于不同的CDB中。
更多信息:
"Creating a PDB as a Proxy PDB"
技术6:
Adopting a non-CDB as a PDB using Replay Upgrade
描述:
在Oracle 20C版本cdb中采用以前版本的非CDB作为PDB时,PDB正常打开时会自动升级。重播升级功能自动捕获必要的CREATE或REPLACE语句,仅重播已更改对象的语句,并转换数据字典。重播机制与应用程序同步中使用的机制相同。
如果通过执行ALTER DATABASE Upgrade SYNC OFF禁用重播升级(这是不推荐的),则可以使用-t选项运行catctl.pl进行经典升级。在这种情况下,必须手动解决任何兼容性错误。
更多信息:
Oracle Database Upgrade Guide to learn how to adopt a non-CDB as a PDB using Replay Upgrade
当您想要将PDB插入不同的CDB时,可以将其拔掉。当您不再需要一个PDB时,您可以拔掉它。未插入的PDB在插入CDB之前是不可用的。
5.1.1当前容器和PDB创建
您可以使用CREATE PLUGGABLE DATABASE语句来创建pdb、应用程序容器、应用程序seeds和应用程序pdb。
创建PDB时,当前容器CDB ROOT或应用程序ROOT确定PDB的关联。创建pdb和应用程序pdb的SQL语句是相同的。例如,在CDB ROOT中运行CREATE PLUGGABLE DATABASE语句时,PDB属于CDB ROOT。在应用程序ROOT中运行CREATE PLUGGABLE DATABASE语句时,应用程序PDB属于应用程序ROOT。
当CDB ROOT是当前容器时,通过运行带有AS application container子句的create PLUGGABLE DATABASE语句来创建应用程序ROOT。克隆、重新定位或将PDB插入应用程序容器时,PDB的应用程序名称和版本必须与应用程序名称和应用程序容器的版本匹配。
5.2 PDB存储
无论您选择如何创建PDB,您都必须决定用于存储数据的表空间和文件。
5.2.1 Storage限制
CREATE PLUGGABLE DATABASE语句的可选存储子句指定了PDBs的存储限制。
存储条款规定了以下限制:
•属于PDB的所有表空间可以使用的存储空间量
使用MAXSIZE和size子句指定限制,或者将MAXSIZE设置为UNLIMITED以表示没有限制。
•PDB中可用于统一审计OS溢出(.bin格式)文件的存储容量
使用MAX_AUDIT_SIZE和size子句来指定限制,或者将MAX_AUDIT_SIZE设置为UNLIMITED来表示没有限制。
•PDB可以使用的自动诊断存储库(ADR)中的诊断量(跟踪文件和事件转储)
使用MAX_DIAG_SIZE和size子句来指定限制,或者将MAX_DIAG_SIZE设置为UNLIMITED来表示没有限制。
如果设置了存储无限,或者没有存储子句,那么PDB就没有存储限制。
下面是使用STORAGE子句的示例。
示例5-1指定存储限制的存储子句
此存储子句指定属于PDB的所有表空间使用的存储不能超过2GB。
STORAGE (MAXSIZE 2G)
例5-2指定无限存储的存储子句
这个存储子句为属于PDB的所有表空间指定无限的存储空间。
STORAGE (MAXSIZE UNLIMITED)
5.2.2 默认表空间
CREATE PLUGGABLE DATABASE语句的DEFAULT TABLESPACE子句指定新PDB的默认表空间。
Oracle数据库将把默认的表空间分配给没有指定不同的永久表空间的任何non-SYSTEM用户。
当您从PDB seed或应用程序seed中创建PDB并指定默认表空间子句时,Oracle数据库将创建一个小文件表空间并将其设置为PDB的默认表空间。当使用PDB种子或应用程序种子以外的方法创建PDB时,例如克隆PDB或插入未插入的PDB,默认表空间必须是源PDB中已经存在的表空间。
例5-3默认表空间子句
DEFAULT TABLESPACE sales
5.2.3 用户表空间
CREATE PLUGGABLE DATABASE语句的USER_TABLESPACES子句指定在新的PDB中哪些表空间可用。可以使用此子句将多个模式的数据分隔为不同的pdb。
你可以使用这个子句来指定以下选项之一:
•列出一个或多个要包含的表空间。
•指定ALL(默认值)来包含所有表空间。
•指定除了列出的表空间之外的所有表空间。
•指定NONE来排除所有表空间。
•如果用户表空间的创建模式必须与oracle提供的表空间(如SYSTEM和SYSAUX)的创建模式不同,那么在USER_TABLESPACES子句中指定以下内容之一:
-copy:表空间的文件被复制到一个新的位置。
-MOVE:表空间的文件被移动到一个新的位置。
-NOCOPY:表空间的文件不会被复制或移动。
-SNAPSHOT COPY:表空间克隆存储快照。
-NO DATA:表空间的数据模型定义是克隆的,但不是表空间的数据。
当CDB的兼容性级别为12.2.0或更高时,被这个子句排除的表空间将在新的PDB中离线创建,并且没有与它们相关联的数据文件。当CDB的兼容性级别低于12.2.0时,这个子句所排除的表空间在新的PDB中处于脱机状态,属于这些表空间的所有数据文件都是未命名的,并且处于脱机状态。
此子句不适用于系统、SYSAUX或临时表空间。不要在这个子句的表空间列表中包含这些表空间。
下面是使用USER_TABLESPACES子句的示例。
例5-4包含一个表空间的user_tablespaces子句
假设创建PDB的PDB包含以下表空间:tbs1、tbs2和tbs3。这个USER_TABLESPACES子句包括tbs2表空间,但不包括tbs1和tbs3表空间。
USER_TABLESPACES=('tbs2')
例5-5 user_tablespaces子句,它包含一个表空间列表
假设创建PDB的PDB包含以下表空间:tbs1、tbs2、tbs3、tbs4和tbs5。这个USER_TABLESPACES子句包括tbs1、tbs4和tbs5表空间,但不包括tbs2和tbs3表空间。
USER_TABLESPACES=('tbs1','tbs4','tbs5')
例5-6 user_tablespaces子句,它包含除了列出的表空间之外的所有表空间
假设创建PDB的PDB包含以下表空间:tbs1、tbs2、tbs3、tbs4和tbs5。这个USER_TABLESPACES子句包括tbs2和tbs3表空间,但不包括tbs1、tbs4和tbs5表空间。
USER_TABLESPACES=ALL EXCEPT('tbs1','tbs4','tbs5')
例5-7 user_tablespaces在不同的创建模式下
这个例子展示了一个完整的CREATE PLUGGABLE DATABASE语句,它可以插入PDB,并且只包含来自PDB的tbs3用户表空间。该示例将oracle提供的表空间(如SYSTEM和SYSAUX)的文件复制到一个新位置,但是移动了tbs3用户表空间的文件。
CREATE PLUGGABLE DATABASE ncdb USING '/disk1/oracle/ncdb.xml'
COPY
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/', '/disk2/oracle/ncdb/')
USER_TABLESPACES=('tbs3') MOVE;
5.2.4 PDB文件位置
在CREATE PLUGGABLE DATABASE语句中,可以指定新PDB使用的文件的位置。
术语“file name”是指文件的名称和位置。CREATE PLUGGABLE DATABASE语句有以下子句,这些子句指示正在创建的新PDB的文件名:
•FILE_NAME_CONVERT子句指定创建PDB后PDB文件的名称。
当文件还没有到达它们的最终目的地,并且您希望在PDB创建期间复制或移动它们时,可以使用这个子句。您可以在任何CREATE PLUGGABLE DATABASE语句中使用此子句。
•CREATE_FILE_DEST子句为PDB的文件指定默认的Oracle Managed Files系统目录或Oracle ASM磁盘组。
使用这个子句为新的PDB启用Oracle Managed Files,独立于为CDB在根中指定的任何Oracle Managed Files的默认位置。您可以在任何CREATE PLUGGABLE DATABASE语句中使用此子句。
必要时,可以在同一个CREATE PLUGGABLE DATABASE语句中使用这两个子句。此外,以下初始化参数可以控制新PDB文件的位置:
•在ROOT中设置DB_CREATE_FILE_DEST初始化参数
这个初始化参数指定了CDB的Oracle托管文件的默认位置。当在PDB中设置此参数时,它将为PDB指定Oracle托管文件的默认位置。
•PDB_FILE_NAME_CONVERT初始化参数
在处理CREATE PLUGGABLE DATABASE语句时,此初始化参数将现有文件的名称映射到新文件名。
下面的表显示了优先顺序时两个条款中使用相同的语句创建可插入数据库,并为每一个条款都初始化参数设置。和初始化参数,表也显示了创建的文件是否创建可插入数据库语句将使用Oracle Managed Files。
关于Oracle Managed Files的使用,该表只适用于CREATE PLUGGABLE DATABASE语句创建的文件。在创建PDB之后为PDB创建的文件可能使用Oracle Managed Files,也可能不使用。
此外,如果FILE_NAME_CONVERT和CREATE_FILE_DEST都是创建可插入数据库中指定语句,然后FILE_NAME_CONVERT设置用于文件被放置在PDB创造,和CREATE_FILE_DEST设置用于设置DB_CREATE_FILE_DEST PDB的初始化参数。在这种情况下,Oracle Managed Files在PDB创建之后控制PDB文件的位置。
5.2.4.1 FILE_NAME_CONVERT子句
如果PDB不使用Oracle Managed Files,那么CREATE PLUGGABLE DATABASE语句的FILE_NAME_CONVERT子句指定如何使用现有文件的名称生成文件的名称(例如数据文件)。
你可以使用这个子句来指定以下选项之一:
•一个或多个文件名模式和替换文件名模式,形式如下:
'string1' , 'string2' , 'string3' , 'string4' , ...
string2文件名模式替换string1文件名模式,string4文件名模式替换string3文件名模式。您可以根据需要使用尽可能多对的文件名模式和替换文件名模式字符串。
如果指定了奇数个字符串(最后一个字符串没有对应的替换字符串),则返回一个错误。不要指定与单个文件名或目录匹配的多个模式/替换字符串。
•当PDB创建过程中不应该复制或移动任何文件时,则为NONE。省略FILE_NAME_CONVERT子句与指定NONE是一样的。
您可以在任何CREATE PLUGGABLE数据库语句中使用FILE_NAME_CONVERT子句。
当在CREATE PLUGGABLE DATABASE语句中没有指定FILE_NAME_CONVERT子句时,Oracle Managed Files或PDB_FILE_NAME_CONVERT初始化参数指定如何生成文件的名称。如果同时使用Oracle Managed Files和PDB_FILE_NAME_CONVERT初始化参数,则优先使用Oracle Managed Files。FILE_NAME_CONVERT子句在指定时优先。
FILE_NAME_CONVERT子句中指定的文件名模式不能匹配由Oracle Managed Files管理的文件或目录。
例5-8 file_name_convert子句
这个FILE_NAME_CONVERT子句使用/oracle/dbs目录中的文件名为/oracle/ pdb5目录中的新PDB生成文件名。
FILE_NAME_CONVERT = ('/oracle/dbs/', '/oracle/pdb5/')
5.2.4.2 CREATE_FILE_DEST子句
CREATE PLUGGABLE DATABASE语句的CREATE_FILE_DEST子句为PDB启用了Oracle Managed Files,并为PDB文件指定了默认的文件系统目录或Oracle ASM磁盘组。
PDB数据文件和临时文件被限制在指定的目录及其子目录中。如果在此子句中将文件系统目录指定为默认位置,则该目录必须存在。此外,运行CREATE PLUGGABLE数据库语句的用户必须具有在指定目录中创建文件的适当权限。或者,您可以指定存在于CDB根目录中的目录对象的名称(CDB$ root)。directory对象指向CREATE_FILE_DEST使用的文件系统目录。
如果在CDB根目录中有针对CDB设置的默认Oracle Managed Files位置,那么CREATE_FILE_DEST设置将覆盖CDB根目录的设置,而指定的CREATE_FILE_DEST设置将用于PDB。
如果指定CREATE_FILE_DEST=NONE,则PDB将禁用Oracle Managed Files。
当CREATE_FILE_DEST子句设置为非NONE值时,DB_CREATE_FILE_DEST初始化参数在PDB中隐式设置,SCOPE=SPFILE。
如果CDB根目录使用Oracle Managed Files,并且没有指定这个子句,那么PDB将从CDB根目录继承Oracle Managed Files的默认位置。
例5-9 create_file_dest子句
这个CREATE_FILE_DEST子句指定/oracle/pdb2/作为新PDB的默认oracle Managed Files系统目录。
CREATE_FILE_DEST = '/oracle/pdb2/'
5.2.4.3 PDB文件位置的限制
CREATE PLUGGABLE DATABASE语句的PATH_PREFIX子句确保与PDB关联的所有目录对象路径都限制在指定的目录或其子目录中。
这个子句还确保以下与PDB关联的文件被限制在指定的目录中:用于PDB的Oracle XML存储库、使用CREATE PFILE语句创建的文件,以及用于Oracle wallet的导出目录。当您希望确保PDB的文件位于特定目录及其子目录中时,请使用此子句。
你可以使用这个子句来指定以下选项之一:
•绝对路径,用作与PDB相关的所有文件路径的前缀。
•存在于CDB根目录中的目录对象的名称(CDB$ root)。directory对象指向用于PATH_PREFIX的绝对路径。
•NONE表示文件路径没有限制。省略PATH_PREFIX子句与指定NONE是一样的。
创建PDB之后,不能修改它的PATH_PREFIX设置。
您可以在任何CREATE PLUGGABLE数据库语句中使用PATH_PREFIX子句。
例5-10 path_prefix子句
这个PATH_PREFIX子句确保与PDB关联的所有文件路径都限制在/disk1/oracle/dbs/salespdb/目录下。
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
一定要指定路径名,以便在添加文件名时正确地形成路径名。例如,在UNIX系统上,一定要用正斜杠(/)结束路径名。
注意:
•在为PDB指定了PATH_PREFIX子句之后,现有的目录对象可能无法正常工作,因为总是将PATH_PREFIX字符串作为前缀添加到PDB中的所有本地目录对象。
•PATH_PREFIX子句不影响由Oracle Managed Files创建的文件。
•PATH_PREFIX子句只适用于用户创建的目录对象。它不适用于oracle提供的目录对象。
•PATH_PREFIX子句不适用于数据文件或临时文件。如果您使用的是Oracle Managed Files,那么可以使用CREATE_FILE_DEST子句来限制数据文件和临时文件的位置。
5.3 服务名称转换
创建PDB的一个重要方面是管理数据库服务的重命名。
当新PDB的服务名称与CDB中现有的服务名称冲突时,可能会导致plug-in冲突。CREATE PLUGGABLE DATABASE语句的SERVICE_NAME_CONVERT子句根据源PDB的服务名称重命名新PDB的用户定义服务。使用这个子句,您可以重命名服务并避免plug-in冲突。
你可以使用这个子句来指定以下选项之一:
•一个或多个服务名称和替换服务名称,格式如下:
'string1' , 'string2' , 'string3' , 'string4' , ...
string2服务名替换string1服务名,string4服务名替换string3服务名。您可以根据需要使用尽可能多的服务名称对和替换服务名称。
如果指定了奇数个字符串(最后一个字符串没有对应的替换字符串),则返回一个错误。
•当不需要重命名服务名称时,则为NONE。省略
SERVICE_NAME_CONVERT子句与指定NONE相同。
您可以在任何CREATE PLUGGABLE DATABASE语句中使用SERVICE_NAME_CONVERT子句,除了从PDB种子创建PDB的CREATE PLUGGABLE DATABASE语句之外。PDB种子不能有用户定义的服务。但是,您可以将此语句用于CREATE PLUGGABLE DATABASE语句,该语句从应用程序容器中的应用程序种子创建应用程序PDB。
例5-11 service_name_convert子句
此SERVICE_NAME_CONVERT子句使用将salesrep服务重命名为salesperson。
SERVICE_NAME_CONVERT = ('salesrep','salesperson')
5.4 创建PDB的子句总结
当您使用create PLUGGABLE DATABASE语句创建PDB时,可以根据不同的因素使用不同的子句。
其中一个因素是用于创建PDB的技术。你可以通过回答一系列的问题来决定使用哪些子句。
下表描述了根据不同的因素创建可插入数据库子句的方法。
表5-3用于创建PDB的子句
问题1:您想要创建一个应用程序容器而不是PDB吗?
YES:指定AS APPLICATION CONTAINER子句。
NO:省略AS APPLICATION CONTAINER子句。
子句只能在以下情况下使用:在CDB中创建应用程序容器
问题2:您是否正在将PDB插入包含一个或多个PDB的CDB,这些PDB是通过插入同一PDB创建的?
YES:指定AS CLONE子句以确保Oracle数据库生成新PDB所需的唯一PDB DBID、GUID和其他标识符。PDB作为unplugged PDB的克隆插入,以确保其所有标识符都是唯一的。
NO:省略AS CLONE子句
子句只能在以下情况下使用:Plugging in an unplugged PDB
问题3:要在应用程序容器中创建应用程序seed吗?
YES:指定AS SEED子句
NO:省略AS SEED子句
子句只能在以下情况下使用:在应用程序容器中创建应用程序seed
问题4:您想要使用CREATE_FILE_DEST子句来为PDB文件指定Oracle Managed Files的默认位置吗?当从PDB种子或应用程序种子创建PDB时,源文件是与种子相关联的文件。
YES:包含一个CREATE_FILE_DEST子句,它指定PDB文件的默认文件系统目录或ASM磁盘组。
NO:忽略CREATE_FILE_DEST子句。
使用其中一种技术来指定文件的目标位置:
•FILE_NAME_CONVERT子句
•为CDB启用Oracle Managed Files,以确定目标位置。
•在PDB_FILE_NAME_CONVERT初始化参数中指定目标位置。
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入unplugged的PDB
问题5:要为PDB指定默认的永久表空间吗?
YES:指定具有适当限制的默认表空间子句。
Oracle数据库将向该表空间分配任何未为其指定其他永久表空间的非系统用户。
当从PDB种子或应用程序种子创建PDB时,Oracle数据库将创建一个smallfile表空间并将其设置为默认表空间。使用从PDB种子或应用程序种子创建以外的技术时,源PDB中必须存在指定的表空间。
NO:省略DEFAULT TABLESPACE子句。
如果不指定此子句,则SYSTEM表空间是非系统用户的默认永久表空间。不建议为非系统用户使用SYSTEM表空间。
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入unplugged的PDB
问题6:要使用FILE_NAME_CONVERT子句来指定文件的目标位置吗?
当从PDB种子或应用程序种子创建PDB时,源文件是与种子相关联的文件。
YES:包含一个FILE_NAME_CONVERT子句,它根据源文件的名称指定文件的目标位置。
NO:忽略FILE_NAME_CONVERT子句。
使用其中一种技术来指定文件的目标位置:
•CREATE_FILE_DEST子句
•为CDB启用Oracle Managed Files,以确定目标位置。
•在PDB_FILE_NAME_CONVERT初始化参数中指定目标位置。
子句只能在以下情况下使用:从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
创建代理PDB(仅适用于系统和SYSAUX表空间中的数据文件)。
插入未插入的PDB
问题7:PDB是一个具有依赖代理PDB的引用PDB吗?它的监听器的主机名是否改变了?
YES:包含一个HOST子句,并为正在创建的PDB指定监听器的主机名。
例如,您可能有一个用于物理主机名和缺省端口的listener network,并配置第二个侦听器,该侦听器绑定到一个虚拟主机名和一个具有非缺省端口号的虚拟IP地址。
NO:省略HOST子句
子句只能在以下情况下使用:从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入未插入的PDB
问题8:要在新的PDB中指定表空间的日志属性吗?
YES:使用logging_clause子句
NO:省略logging_clause子句
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB
插入未插入的PDB
问题9:您要复制或移动文件到新的位置吗?
YES:指定COPY以将文件复制到新位置。COPY是默认值。指定MOVE将文件移动到新的位置。使用其中一种技术来指定目标位置:
•包括一个FILE_NAME_CONVERT子句,它根据源文件的名称指定目标位置。
•包含一个CREATE_FILE_DEST子句,为PDB的文件指定Oracle Managed Files的默认位置。
•启用Oracle Managed Files,以确定目标位置。
•在PDB_FILE_NAME_CONVERT初始化参数中指定目标位置。
NO:指定NOCOPY
子句只能在以下情况下使用:插入未插入的PDB
问题10:是否要指定源PDB的数据模型定义是克隆的,而不是源PDB的数据?
YES:指定NO DATA子句
NO:省略NO DATA子句
子句只能在以下情况下使用:克隆PDB
问题11:您想要使用多个并行执行服务器来并行化PDB创建吗?
YES:要让CDB选择并行度,可以包括或省略PARALLEL子句。
要指定并行度,请使用整数指定PARALLEL子句。例如,指定PARALLEL 4表示并行度为4。
NO:指定PARALLEL为0或1
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB
问题12:您是否希望使用PATH_PREFIX子句来限制以下PDB的文件路径:目录对象、PDB的Oracle XML存储库、使用CREATE PFILE语句创建的文件,以及Oracle wallets的导出目录?
PATH_PREFIX子句不影响由Oracle Managed Files创建的文件。
YES:包含一个指定绝对路径的PATH_PREFIX子句。
NO:指定PATH_PREFIX为NONE或省略
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入未插入的PDB
问题13:PDB是具有依赖代理PDB的引用PDB吗?它的侦听器的端口号是否更改为一个非1521的值?
YES:包含一个PORT子句,并为正在创建的PDB指定监听器的端口号。
例如,您可能有一个用于物理主机名和缺省端口的侦听器网络,并配置第二个侦听器,该侦听器绑定到一个虚拟主机名和一个具有非缺省端口号的虚拟IP地址
NO:省略PORT子句
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入未插入的PDB
问题14:您希望能够刷新PDB以将更改从源PDB传播到克隆PDB吗?
可刷新的PDB必须以只读模式打开。
YES:包含一个REFRESH MODE MANUAL或REFRESH MODE EVERY minutes子句。
NO:省略REFRESH MODE clause或包含一个REFRESH MODE NONE clause.
子句只能在以下情况下使用:克隆PDB
问题15:要将预定义的Oracle角色授予PDB中本地的PDB_DBA角色吗?
PDB的新管理员被授予PDB中本地的PDB_DBA公共角色。默认情况下,CREATE PLUGGABLE DATABASE语句不授予管理员或角色任何特权。
YES:包括ROLES子句,并指定要授予PDB_DBA角色的预定义Oracle角色。指定的角色被授予PDB中的本地PDB_DBA角色。运行CREATE PLUGGABLE数据库语句的用户不需要被授予指定的角色。有关预定义Oracle角色的信息,请参阅Oracle数据库安全指南。
NO:省略ROLES子句
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
创建代理PDB
问题16:要使用SERVICE_NAME_CONVERT子句根据源PDB的服务名称重命名新PDB的用户定义服务吗?
YES:包含SERVICE_NAME_CONVERT子句,该子句指定服务的新名称及其要替换的服务名称。必要时指定多个服务名称和替换服务名称。
NO:省略SERVICE_NAME_CONVERT子句
子句只能在以下情况下使用:
从应用程序种子创建PDB,而不是PDB种子
克隆一个PDB,重新定位一个PDB
创建代理PDB(仅适用于系统和SYSAUX表空间中的数据文件)。
插入未插入的PDB
问题17:是否要使用storage-managed snapshot(而不是由ALTER PLUGGABLE DATABASE snapshot生成的快照)克隆PDB ?
YES:指定SNAPSHOT COPY子句,使用storage-managed snapshots克隆PDB。仅当基础文件系统支持存储快照时,才支持快照复制。
snapshot copy几乎是瞬时的,因为它不需要复制源PDB的完整数据文件。但是,您不能从CDB根或应用程序根中拔出快照副本PDB。
另外,如果存在快照副本PDB,则不能删除快照副本PDB所基于的存储快照。
物化过程将使用稀疏文件的快照副本PDB转换为完整的PDB。通过运行ALTER PLUGGABLE DATABASE Materialize命令实现PDB。
NO:省略snapshot copy子句
子句只能在以下情况下使用:克隆PDB
问题18:是否要使用ALTER PLUGGABLE DATABASE SNAPSHOT启用pdb级快照?
YES:在ALTER PLUGGABLE DATABASE SNAPSHOT命令中指定一个快照模式子句,并指定手动或每个snapshot_interval [MINUTES|HOURS]。
NO:省略SNAPSHOT MODE子句或指定SNAPSHOT MODE NONE.
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
创建代理PDB(仅适用于系统和SYSAUX表空间中的数据文件)。
插入未插入的PDB
问题19:是否所有的源文件都在一个目录中,并具有需要多个SOURCE_FILE_NAME_CONVERT条目的新文件名?
YES:使用源文件的完整绝对路径指定SOURCE_FILE_DIRECTORY。
NO:省略SOURCE_FILE_DIRECTORY clause.
子句只能在以下情况下使用:
直接使用XML文件插入未插入的PDB。
此子句不适用于用. PDB存档文件插入未插入的PDB。
问题20:XML文件的内容是否准确地描述了源文件的位置?
YES:省略SOURCE_FILE_NAME_CONVERT子句
NO:使用SOURCE_FILE_NAME_CONVERT子句指定源文件位置。
子句只能在以下情况下使用:
直接使用XML文件插入未插入的PDB。
此子句不适用于用. PDB存档文件插入未插入的PDB。
问题21:您希望将新的PDB包含在一个或多个standby CDBs中吗?
YES:指定ALL、ALL EXCEPT或备用CDBs列表。
在创建远程克隆时,可以将初始化参数STANDBY_PDB_SOURCE_FILE_D BLINK设置为指向源PDB数据文件的数据库链接的名称。该操作仅在源PDB为只读打开时才复制数据文件。
NO:省略STANDBYS clause子句或指定NONE
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB
将一个PDB
插入未插入的PDB
问题22:您想限制PDB可以使用的存储空间吗?
YES:使用适当的限制指定storage子句。
NO:忽略存储子句,或使用存储子句指定无限存储。
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入未插入的PDB
问题23:如果目标位置存在临时文件,是否要重用该临时文件?
YES:包括TEMPFILE REUSE clause.
NO:忽略TEMPFILE REUSE clause。
确保目标位置中没有与新临时文件同名的文件。
子句只能在以下情况下使用:
从PDB种子或应用程序种子创建PDB
克隆一个PDB,重新定位一个PDB
插入未插入的PDB
问题24:要指定哪些表空间包含在新的PDB中,哪些表空间不包含在新的PDB中吗?
YES:包含USER_TABLESPACES子句,并指定新PDB中包含的表空间。
NO:省略USER_TABLESPACES
子句只能在以下情况下使用:插入未插入的PDB
问题25:要将未插拔的PDB插入CDB吗?
YES:包括USING filename子句。
如果在数据保护场景中将PDB插入到主CDB,那么将STANDBY_PDB_SOURCE_FILE_DIRECTORY初始化参数设置为备用位置,该位置包含用于实例化PDB的源数据文件。如果没有找到,那么备用数据库将尝试在OMF位置定位文件。如果在OMF位置中没有找到,则将数据文件复制到OMF位置,并重新启动备用数据库上的redo apply。
NO:省略USING filename clause.
子句只能在以下情况下使用:插入未插入的PDB
问题26:要基于PDB快照创建新的PDB吗?
YES:包括USING SNAPSHOT子句,并指定PDB快照名称、SCN或时间戳。结果是一个完整的、独立的PDB。
PDB快照是PDB的一个时间点副本。在创建快照时,源PDB可以是打开的只读的,也可以是读/写的。要手动创建pdb级快照,请指定create PLUGGABLE DATABASE(或ALTER PLUGGABLE DATABASE)的SNAPSHOT子句。
指定each interval子句配置PDB以自动创建快照。
NO:排除USING SNAPSHOT clause.
子句只能在以下情况下使用:克隆PDB快照
问题27:你想通过splitting镜像来克隆位于Oracle ASM中的PDB吗?
YES:包括USING MIRROR COPY子句,并指定镜像副本的名称和源PDB。
NO:省略USING MIRROR COPY clause.
子句只能在以下情况下使用:克隆一个使用ASM存储的PDB
5.5 创建PDB的一般先决条件
在创建PDB之前,您必须满足某些先决条件。
在创建PDB之前,确保满足以下先决条件。
1 CDB必须存在。
2 CDB必须读/写模式。
3 当前用户必须是其当前容器CDB ROOT或应用程序容器的公共用户。
4 当前用户必须具有CREATE PLUGGABLE DATABASE系统权限。
5 您必须为每个容器确定一个惟一的容器名称。在单个CDB中,每个容器名称必须是惟一的,并且每个容器名称在通过特定侦听器访问其实例的所有CDB的范围内必须是惟一的。
PDB名称将PDB与CDB中的其他PDB区别开来。PDB名称遵循与服务名称相同的规则,其中包括不区分大小写。
6 如果在 Oracle Data Guard配置中使用physical standby database创建PDB,则必须在创建PDB之前完成其他任务。
7 如果您正在创建一个包含使用透明数据加密加密的数据的PDB,那么您必须完成其他任务。
8 如果您正在创建启用Vault-enabled的PDB,则必须完成其他任务。
9 如果您通过克隆非CDB来创建PDB,并且希望能够使用源非CDB的备份来恢复新的PDB,那么您必须执行DBMS_PDB.EXPORTRMANBACKUP之前克隆。当源数据库以读-写模式打开时,作为克隆之前的最后一步执行该过程。此过程捕获数据字典中的所有备份元数据。
当将PDB重新定位到不同的CDB时,执行DBMS_PDB.EXPORTRMANBACKUP是不必要的。拔下PDB会自动导出备份元数据。
更多数据库相关学习资料,可以查看我的ITPUB博客,网名chenoracle:
http://blog.itpub.net/29785807/