Oracle 12c使用SQL*Plus来创建与删除应用程序容器

可以使用不同方式来创建应用程序容器,比如使用CDB seed,克隆现有的PDB或Non-CDB,插入一个被拔出的PDB,也可以从CDB中删除应用程序容器。

创建应用程序容器
可以使用create pluggable database语句来在CDB中创建应用程序容器。当执行create pluggable database语句时指定as application container子句可以创建一个新的应用程序容器。应用程序容器由应用程序root与用来存储一个或多个应用程序数据的一组应用程序PDB组成。应用程序PDB可以被附加到应用程序root中,并且可以选择快速地创建应用程序seed与简单地创建新的应用程序PDB。应用程序PDB与应用程序root可以共享应用程序公共对象。

有三种类型的应用程序公共对象:
.元数据链接应用程序公共对象存储特定对象的元数据,比如表。 因此容器可以共享有相同结构没有相同数据的应用程序公共对象。

.数据链接应用程序公共对象只在应用程序root中定义一次并且在应用程序PDB的上下文中共享只读对象。

.扩展数据链接应用程序公共对象在应用程序root中存储共享数据但也允许应用程序PDB来将数据添加到对象中。添加的数据是本地数据它对于每个应用程序PDB来说是唯一的。

通过执行creatae pluggable database as application container子句可以创建应用程序容器。也可以使用以下技术来创建应用程序容器:
.使用CDB seed
.克隆现有的PDB或Non-CDB
.迁移PDB
.插入被拔出的PDB

当当前容器是CDB的root并且在执行create pluggable database语句时指定了as application container子句时,将创建应用程序容器。

迁移现有的应用程序为应用程序容器
可以通过使用现有的PDB来创建应用程序容器。当迁移现有应用程序为一个应用程序容器时必须完成额外的任务。要附加的PDB必须包含应用程序数据库对象,包含它们的数据,并且对于应用程序所访问的相关数据库对象必须执行dbms_pdb中的过程。当应用程序公共用户,角色或profiles存放在应用程序root中,对与应用程序相关的数据库对象必须执行dbms_pdb包。在应用程序迁移为应用程序容器后,可以在应用程序容器中创建应用程序PDB,并且可以使用现有的PDB来创建应用程序PDB。

创建应用程序容器的准备
在创建应用程序容器之前必须完达到以下条件:
.CDB必须存在

.CDB必须处于读写模式

.当前容器如果是CDB的root,那么当前用户必须是一个公共用户

.当前用户必须有create pluggable database系统权限

.对于每个应用程序容器必须要决定一个唯一的应用程序容器名字。每个应用程序容器名字必须对于单个CDB中的所有容器来说是唯一的,并且每个应用程序容器名字必须在特定监听所监听的所有CDB范围内是唯一的。应用程序容器名字用来区分CDB中的应用程序容器。应用程序容器名字遵守与服务名一样的规则,它是大小写敏感的。

.如果在使用物理备库的Data Guard配置中创建应用程序容器,那么在创建应用程序容器之前必须完成额外的任务。

.如果使用PDB将现有的应用程序迁移成应用程序容器,那么它必须能够通过克隆PDB来创建应用程序root,迁移PDB到应用程序root中,或者将PDB插入到应用程序root中。

创建应用程序容器
可以执行create pluggable database … as application container语句来创建应用程序容器。创建应用程序容器的操作如下:
1.在SQL*Plus中,确保当前容器为CDB的root。

2.执行create pluggable database … as application container语句。如果需要还可以指定其它子句。在创建应用程序容器后,它处于mounted模式,并且它的状态为NEW。可以查询v$pdbs视图的open_mode列来查看应用程序容器的打开模式。可以通过查询cdb_pdbs或dba_pdbs视图来查看应用程序状态。并且会对应用程序容器创建一个新的缺省服务。这个服务与应用程序容器有相同的名字,并且可以被用来访问应用程序容器。

3.以读写模式来打开新的应用程序容器。为了将新应用程序容器集成到CDB中必须以读写模式来打开新的应用程序容器。如果你试图以只读模式来打开应用程序容器将会返回错误住处。在应用程序容器以读写模式打开后,它的状态将会变为NORMAL。

4.备份应用程序容器

使用CDB Seed来创建应用程序容器
这个例子假设满足以下条件:
.对应用程序容器没有使用存储限制。因此不指定storage子句。

.应用程序容器不创建缺省表空间

.不指定path_prefix子句

.不指定file_name_convert与create_file_dest子句。可以启用OMF或设置pdb_file_name_convert参数。与CDB Seed相关的文件基于OMF配置或参数设置将会被复制到新目录中。

.在目标目录中如果没有与新temp文件同名的文件存储,将会创建新temp文件,因此不指定tempfile reuse子句。

.没有预先定义的Oracle角色需要被授予给PDB_DBA角色。

SQL> create pluggable database salesact as application container admin user salesadm identified by "xxzx";

Pluggable database created.


SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
JYPDB                                                                                                                            READ WRITE
ORCLPDB                                                                                                                          READ WRITE
SALESACT                                                                                                                         MOUNTED


SQL> alter pluggable database salesact open read write;

Pluggable database altered.

SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
JYPDB                                                                                                                            READ WRITE
ORCLPDB                                                                                                                          MOUNTED
SALESACT                                                                                                                         READ WRITE

通过克隆本地PDB来创建应用程序容器
这个例子假设满足以下条件:
.不指定path_prefix子句

.指定file_name_convert子句来指定复制文件所存放的目录。在这个例子中,文件从
+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/与+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/TEMPFILE/目录中复制到+test/jy/hract目录中。不指定create_file_dest子句,并且也不使用OMF或pdb_file_name_conver参数。

.对于应用程序root使用存储限制。因此需要指定storage子句。这里指定属于应用程序root的所有表空间大小不能超过6G。这种存储限制不会应用到附加到应用程序root中的应用程序PDB。

.在目标目录中没有与新temp文件同名的文件存在,所以将会创建新的temp文件。因此不用指定tempfile reuse子句。

SQL> create pluggable database hract as application container from jypdb
  2  file_name_convert = ('+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/system.297.954436417', '+test/jy/hract/system01.dbf',
  3                       '+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/sysaux.276.954436419','+test/jy/hract/sysaux01.dbf',
  4                       '+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/undotbs1.296.954436417','+test/jy/hract/undotsb1.dbf',
  5                       '+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/undo_2.274.954436487','+test/jy/hract/undo_2.dbf',
  6                       '+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/TEMPFILE/temp.275.954436435','+test/jy/hract/temp01.dbf'
  7                       )
  8  storage (maxsize 6g);

Pluggable database created.

SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
HRACT                                                                                                                            MOUNTED
JYPDB                                                                                                                            READ WRITE
SALESACT                                                                                                                         READ WRITE

通过插入被拔出的PDB来创建应用程序容器
这个例子假设满足以下条件:
.新应用程序容器不是基于已经被用来创建PDB或应用程序容器的同一个被拔出的PDB而进行创建。因此不用指定as clone子句。

.不指定path_prefix子句

.xml元数据文件没有精确地描述文件的当前目录,因此需要指定source_file_name_convert或source_file_directory子句。在这个例子中XML文件指示文件在+DATA/JY/DATAFILE/,但实际文件是存储在+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/与+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/TEMPFILE/目录中,指定source_file_name_convert子句。

.文件存储在正确目录中,因此不指定nocopy子句。

.对应用程序容器使用存储限制,因此指定storage子句。指定应用程序容器的所有表空间大小不超过4G。

.在目标目录中有与新temp文件同名的文件存在,为了创建新的temp文件。因此指定tempfile reuse子句。

SQL> create pluggable database payrollact as application container using '/tts/plug/jypdb.xml'
  2  source_file_name_convert = ('+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/', '+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/DATAFILE/',
  3                              '+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/TEMPFILE/','+DATA/JY/58E7574E7926075EE053AC828A0AA4C9/TEMPFILE/'
  4                              )
  5  nocopy
  6  storage (maxsize 4g)
  7  tempfile reuse;

Pluggable database created.

SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
PAYROLLACT                                                                                                                       MOUNTED

SQL> alter pluggable database payrollact open read write;

Pluggable database altered.

SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
PAYROLLACT                                                                                                                       READ WRITE

从CDB中拔出应用程序容器
为了拔出应用程序容器必须满足以下条件:
.当前用户必须有sysdba或sysoper管理权限

.应用程序容器必须至少打开过一次

.应用程序容器不能包含任何应用程序PDB

.应用程序容器不能包含任何应用程序Seed

SQL> alter pluggable database payrollact unplug into '/tts/plug/payrollact.xml';

Pluggable database altered.

删除应用程序容器
可以使用drop pluggable database语句来删除应用程序容器。当想要将一个应用程序容器从一个CDB中移动到另一个CDB中或不再需要这个应用程序容器时可以将其删除。

删除应用程序容器与删除PDB是很类似的。当删除应用程序容器时,CDB的控制文件会被修改来删除与被删除应用程序容器相关的信息。与应用程序容器相关的归档重做日志与备份不会被删除,但可以使用RMAN来删除它们。

当删除应用程序容器时,可以使用下面的子句来保留或删除数据文件:
. keep datafiles,缺省值,保留数据文件,即使指定了keep datafiles子句应用程序容器的temp文件仍然会被删除,因为temp文件不再需要。

.including datafiles,删除数据文件。如果应用程序容器是使用snapshot copy子句创建的,那么当删除应用程序容器时必须指定including datafiles子句。

要删除应用程序容器必须满足以下条件:
.应用程序容器必须处于mounted状态或者unplugged状态。

.当前用户必须有sysdba或sysoper管理权限。

.应用程序容器不能包含任何应用程序PDB。

.应用程序容器不能包含任何应用程序Seed。

当删除应用程序容器时保留数据文件

drop pluggable database payrollact keep datafiles;

当删除应用程序容器时并且删除数据文件

drop pluggable database payrollact including  datafiles;

发表评论

电子邮件地址不会被公开。