共计 3904 个字符,预计需要花费 10 分钟才能阅读完成。
本篇文章给大家分享的是有关 Oracle 12c R2 版本 Application Containers 的特性是什么,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
在 Oracle Database 12c R2 版本中,Oracle 带来新的 Application Containers 特性,该特性对原有的多租户功能进行了增强,在 CDB root 容器中可以创建一个叫做 Application root 的容器,类似于 CDB root,可在其内创建多个依赖于 Application root 的 Application PDBs。
“Application”
在 Application Container 特性下还有另一个概念,被命名为“Application”,我们可以把“Application”理解为一个区域,“Application”只能创建在 Application root 中,其内可以创建表、视图、函数等公共对象,然后可在 Application PDBs 中使用 sync 同步命令,来实现“Application”内的公共对象共享到 Application PDBs 中。
本篇文章中,通过 Application Root/PDBs 与 Application 的创建开始带你认识 Application Container 特性,在第二篇中将带你了解“Application”内的公共对象(Application Common Objects), 并通过实验让你对其有一个更加直观的认识。
Application root 的创建
Application root 与普通的 PDB 创建语句相似,在创建语句中需要指定“as application container”子句。
首先我们先设置 db_create_file_dest
创建一个名 qdatacon1 的 Application root
这样一个名为 qdatacon1 的 Application root 就已经成功创建 ,可以通过视图 dba_pdbs.application_root 字段查看是否是 Application rootdba_pdbs.application_root 字段为 YES
将 QDatacon1 打开
注意,当在使用 Application Containers 特性时需要使用数据文件的 OMF 的管理方式,虽然在不使用 OMF 管理时依然可以成功创建 Application root 以及 Application PDBs,但当“Application”内包含表空间后,在 Application PDBs 中进行同步“Application”时会报 ORA-01537 错误,无法将“Application”内的表空间同步到 Application PDBs 中。
Application root 的基本管理与普通的 PDB 基本上没有区别, 包括 Application root 的 cloning/unplug/plugin 等。但需要注意 as application container 的使用
当然,如果你想将 Application root 拔出后,以普通 PDB 的方式插入 CDB 中,那么去掉
as application container 子句即可。
Application PDBs 的创建
Application PDB 在创建时必须连接到相应 Application root 中,而不是 CDB root,当连接到 Application root 中时,只需按照创建普通 PDB 的方式创建即可,无需额外子句指定,创建完成的 PDB 既是相应 Application root 中的 Application PDB。
切换到 Application root 中创建 Application PDB:qdcpdb1,切换到 CDB 中
在 CDB$root 中通过 show pdbs 显示时,可以看到的 Application PDB 与普通的 PDB 并没有什么区别。
可以通过 cdb_pdbs 视图,来查看 Application PDB 属于哪个 Application root
当 Applicatoin PDB 创建成功,可以使用 sync 命令将它与 Application root 中定义的 Application 进行同步。
alter pluggable database application all sync;
Applications
文章的开篇提到,可以把“Application”做为一个区域来理解,而“Application”只能在 Application root 中创建及管理
在“Application”的维护命令中可能最常用的就是 install、patch、upgrade 以及 uninstall,下面对三个命令做简单描述。
Install an Application
当使用 alter pluggable database 带有 begin install 子句时,即开始一个“Application”的安装,这里可以理解为一个区域的开始,当安装完成后在 Application PDB 中使用 sync 命令同步相应的“Application”将会被自动安装在本 PDB 内。
这样我们开始了一个 qdcon1_reg1 的“Application”,使用 end install 命令封闭 qdcon1_reg1,
可以通过 dba_applications 视图查看,已经安装的 Application
Application 安装完成后,可以在该 Application root 下的 Application PDB 中使用 sync 命令来进行同步,如下:
查看 dba_applications 视图,确认 qdcon1_reg1 是否已经安装
可以看到 qdcon1_reg1 已经安装完成,安装完成后 qdcon1_reg1 中的公共对象会以特定的方式被共享到相应的 Application PDB 中,
表 tdata 已经被共享到 qdcpdb1 中。
在 Application root 中可以通过 dba_app_pdb_status 视图,查看 Application 被安装到哪些 Application PDB 中
Patch an Application
在上面的小结中,当我们使用 end install 子句将“Application”封闭后,如果想再次在“Application”中创建对象 (table/view/packages/sequence 等),以及对“Application”内已经存在的对象进行 alter 操作时,我们可以使用 patch 子句对现有的“Application”进行修补操作。
如下示例,开始一个 patch,并且在 application 内创添加表以及更改现存表的表结构:
删除 Application 内的表
删除失败
结束 patch
查看 patch 信息
在 qdcpdb1 中同步 qdcon1_reg1
tdata 的表结构与 texte 表均同步完成
Upgrade an Application
对“Application”我们可以使用 patch 来对其进行修补操作,但修补操作只限添加 / 更改等,无法对已经存在“Application”中的公共对象进行删除操作,如果我们想对公共对象进行删除操作,可以使用 UPGRADE 子句对现有的“Application”进行升级,在升级的过程中,Oracle 会首先自动创建 Application root 的 Clone 版本,Clone 版本创建完成后,Application PDBs 将指向 Clone 版本的 Application root,“Application”将继续执行升级操作,升级完成之后,Application root 的 Clone 版本将继续被保留,并且为不同步“Application”的 Application PDB 提供服务,同步“Application”后的 Application PDB 将指向升级后的 Application root。
升级现有的 qdcon1_reg1:F1956732192_4_1 即为 qdatacon1 的 clone 版本
删除 tdata 表,并且创建新表 tmeta:
结束升级,并查看版本信息
在 qdcpdb1 中同步 qdcon1_reg1
tdata 被删除 /tmeata 的创建已同步到 qdcpdb1 中。
Uninstall an Application
“Application”的卸载后并不会从数据字典中将该“Application”删除,它会被标记为 UNINSTALL,以便“Application”不可以进行 upgrade/patch/uninstall 等操作,当 uninstall 命令发出后,需要将该“Application”中包含的对象全部删除。
uninstall 同样会产生 clone 版本的 Application root
删除对象且结束 uninstall
因为对象并没有全部删除,导致 end uninstall 失败,下面继续 drop 用户和表空间:
查看被 uninstall 的 qdcon1_reg1 状态
在 qdcpdb1 中查看公共对象情况
表 texte 是 extended data-linked 方式,数据存储在 Application root 的 qdata_tbs 中,因为 qdata_tbs 已经被删除,所以在 qdcpdb1 中查询时报错,而 tmeta 为 metadata-linked 方式,数据存储在本地,所以可以在未做同步时可以查询。
同步 qdcon1_reg1
同步完成。
以上就是 Oracle 12c R2 版本 Application Containers 的特性是什么,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。