Oracle 12c 使用SQL*Plus来创建与移动应用程序Seeds
可以使用多种方法来创建应用程序seeds,包括使用CDB seed,克隆现有的PDB或Non-CDB,与附加一个卸载的PDB。也可以从应用程序容器中删除应用程序seeds。
为了在应用程序容器中创建新的应用程序seed,可以执行带有as seed子句的create pluggable database语句。可以使用应用程序种子为应用程序提供一个应用程序容器。通常在应用程序seed创建之前应用程序容器的应用程序被安装在应用程序root中。在应用程序seed创建之后它将与应用程序root进行同步,因此应用程序被安装在应用程序seed中。当创建应用程序seed之后,使用应用程序seed创建的任何PDB都安装应用程序。当应用程序root中的应用程序被升级或打补丁后,应用程序seed必须使用应用程序root进行同步来应用这些改变。
通过执行带有as seed子句的create pluggable database语句来创建应用程序seed。
一个应用程序容器可以有零或一个应用程序seed。当使用as seed子句创建应程序seed时,不用指定它的名字。应用程序seed名字总是以application_container_name$SEED命名,其中application_container_name是应用程序seed的应用程序容器的名字。例如,在salesact应用程序容器中的应用程序seed它的名字必须是salesact$SEED。
当创建一个新的应用程序seed时,必须为在create pluggable database语句中为应用程序容器指定管理员。这个语句将在应用程序容器中创建一个本地用户的管理员,并且被授予pdb_dba角色。
创建应用程序seed的所需要满足的条件:
.CDB必须存在
.CDB必须处于读写模式
.应用程序seed所属的应用程序容器必须处于读写模式
.当前用户必须是一个公共用户,应用程序seed所属的应用程序root是当前容器
.当前用户有create pluggable database系统权限
.在应用程序容器中对于包含应用程序的应用程序seed,应用程序必须安装在应用程序root
创建应用程序seed
可以通过执行带有as seed子句的create pluggable database语句来创建应用程序。应用程序容器中的应用程序seed类似于CDB中的seed。一个应用程序seed能用来快速与简单的创建满足应用程序容器要求的应用程序PDB。创建应用程序seed的操作如下:
1.在SQL*Plus中,确保当前容器是应用程序root。
2.执行带有as seed子句的create pluggable database语句来创建应用程序seed。根据需要还可以指定其它子句。在创建完应用程序seed后,它处于mounted模式,状态为new。可以通过查询v$pdbs视图的open_mode列来检查应用程序seed的打开模式。可以通过查询cdb_pdbs或者dba_pdbs视图的status列来查看应用程序seed的状态。还会为应用程序seed创建缺省的服务名。服务名与应用程序seed同名并且可以被用来访问应用程序seed。
3.以读写模式来打开新的应用程序seed
4.为了将新应用程序seed集成到应用程序容器中必须以读写模式来打开新的应用程序seed。如果试图以只读模式来打开新的应用程序seed将会返回错误信息。在应用程序seed以读写模式打开后,它的状态将为normal。
5.执行一个或多个以下操作:
5.a 如果使用CDB seed中创建应用程序seed,那么将容器切换到应用程序seed,并且执行带有sync子句的alter pluggable database语句来同步应用程序seed。同步使用应用程序root来实例化应用程序seed中的一个或多个应用程序root的应用程序。
5.b 如果使用应用程序root中创建应用程序seed,那么将容器切换到应用程序seed,然后执行pdb_to_apppdb.sql脚本来将应用程序root转换为应用程序PDB。
当通过克隆一个应用程序PDB来创建应用程序seed时这些操作不需要执行。
6.关闭应用程序seed,然后以只读模式来打开它。
7.备份应用程序seed。
使用CDB seed来创建应用程序seed
这个例子假设满足以下条件:
.应用程序seed将被创建在名为salesact的应用程序容器中。
.对应用程序seed不使用存储限制,因此不指定storage子句。
.应用程序seed不创建缺省表空间。
.不指定path_prefix子句。
.不指定file_name_convert与create_file_dest子句。可以对CDB启用OMF或设置pdb_file_name_convert初始化参数。与CDB相关的文件将会基于OMF配置或参数设置被复制到新目录中。
.在目标目录中没有与新temp文件同名的文件存在,将会创建新的temp文件,因此不用指定tempfile reuse子句。
.不需要预先定义Oracle角色被授予给pdb_dba角色。
执行的语句如下:
先切换到应用程序容器salesact中
SQL> alter session set container=salesact;Session altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITE
执行语句来使用CDB seed来在应用程序容器salesact中创建应用程序seed,并打开应用程序seed。
SQL> create pluggable database as seed admin user actseedadm identified by "xxzx7817600";Pluggable database created.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESACT$SEED MOUNTEDSQL> alter pluggable database salesact$seed open;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESACT$SEED READ WRITE
切换容器到应用程序seed(salesact$SEED)中,使用应用程序root中的所有应用程序来同步应用程序seed。
SQL> alter session set container=salesact$seed;Session altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT$SEED READ WRITESQL> alter pluggable database application all sync;Pluggable database altered.
关闭应用程序seed(salesact$seed),然后以只读模式来打开应用程序seed。
SQL> alter pluggable database close immediate;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT$SEED MOUNTEDSQL> alter pluggable database open read only;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT$SEED READ ONLY
因为应用程序容器名为salesact,所以应用程序seed名为salesact$seed。在创建应用程序seed时一起创建了一个本地管理用户并且被授予了pdb_dba公共角色。如果这个用户在创建应用程序seed时没有授予管理权限,那么使用sys与system公共用户来管理应用程序seed。当创建应用程序seed时,将使用应用程序root来同步应用程序seed。因此应用程序seed将包含安装在应用程序root中的应用程序与应用程序公共对象它们是这些应用程序的一部分。当使用应用程序seed来创建新的应用程序PDB时,应用程序PDB也会包含这些安装的应用程序与应用程序公共对象。
使用应用程序PDB创建应用程序seed
这个例子假设满足以下条件:
.在应用程序容器salesact中创建了应用程序seed。
.将在应用程序PBD(salesapppdb)所在的应用程序容器中创建应用程序seed。
.对应用程序seed不使用存储限制,因此不指定storage子句。
.应用程序seed不包含缺省表空间。
.不指定path_prefix子句。
.不指定file_name_convert与create_file_dest子句。可以启用OMF或设置pdb_file_name_convert初始化参数。与应用程序root相关的文件会基于OMF的配置或初始化参数设置被复制到新目录中。
.在目标目录中没有与新temp文件同名的文件存在,因此不需要使用tempfile reuse子句。
切换容器到应用程序容器(salesact),并执行以下命令来创建应用程序seed。
SQL> create pluggable database as seed from salesapppdb;Pluggable database created.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESAPPPDB READ WRITESALESACT$SEED MOUNTED
然后打开应用程序seed,再关闭应用程序seed,最后再以只读方式打开应用程序seed。
SQL> alter pluggable database salesact$seed open;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESAPPPDB READ WRITESALESACT$SEED READ WRITESQL> alter pluggable database salesact$seed close immediate;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESAPPPDB READ WRITESALESACT$SEED MOUNTEDSQL> alter pluggable database salesact$seed open read only;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESAPPPDB READ WRITESALESACT$SEED READ ONLY
因为应用程序容器名为salesact,所以应用程序seed名字默认为salesact$seed。应用程序seed是使用应用程序pdb而创建的,因此应用程序seed就包含了安装在应用程序root中的应用程序与应用程序公共对象,它们是这些应用程序的一部分。当使用应用程序seed来创建新的应用程序pdb时,应用程序pdb也会包含安装的应用程序与应用程序公共对象。
使用应用程序root来创建应用程序seed
这个例子假设满足以下条件:
.应用程序seed将创建在应用程序容器(salesact)中。应用程序seed使用对应用程序容器的root进行克隆进行创建。
.对应用程序seed不使用存储限制,因此不使用storage子句。
.应用程序seed不包含缺省表空间。
.不使用path_prefix子句。
.不使用file_name_convert与create_file_dest子句。可以启用OMF或设置pdb_file_name_convert初始化参数。基于OMF配置或初始化参数的设置与应用程序root相关的文件会被复制到新目录中。
.在目标目录中没有与新temp文件同名的文件存在,因此不需要使用tempfile reuse子句。
切换到应用程序容器(salesact)中,执行下面的命令来创建应用程序seed。
SQL> create pluggable database as seed from salesact;Pluggable database created.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESACT$SEED MOUNTEDSALESAPPPDB READ WRITE
打开应用程序seed,切换容器到应用程序seed,然后执行pdb_to_apppdb.sql脚本将应用程序root转换为应用程序pdb。
SQL> alter pluggable database salesact$seed open;Warning: PDB altered with errors.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESACT$SEED READ WRITESALESAPPPDB READ WRITESQL> alter session set container=salesact$seed;Session altered.SQL> @$ORACLE_HOME/rdbms/admin/pdb_to_apppdb.sql...SQL> BEGIN 2 execute immediate '&open_sql &restricted_state'; 3 EXCEPTION 4 WHEN OTHERS THEN 5 BEGIN 6 IF (sqlcode <> -900) THEN 7 RAISE; 8 END IF; 9 END; 10 END; 11 /PL/SQL procedure successfully completed.SQL> SQL> WHENEVER SQLERROR CONTINUE;SQL> alter pluggable database close immediate instances=all;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT$SEED MOUNTED1 row selected.SQL> alter pluggable database open read only instances=all;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT$SEED READ ONLY1 row selected.
因为应用程序容器名为salesact,所以应用程序seed名为salesact$seed。应用程序seed是使用应用程序root进行创建的。因此应用程序seed包含安装在应用程序root中的应用程序与应用程序公共对象,它们是这些应用程序的一部分。当使用应用程序seed来创建新应用程序PDB时,应用程序pdb也会包含安装的应用程序与应用程序公共对象。
从应用程序容器中拔出应用程序seed
拔出应用程序seed就是断开应用程序seed与应用程序容器的关联。当不再需要应用程序seed时可以将其删除。拔出应用程序seed类似于拔出PDB。为了拔出应用程序seed,连接到它的应用程序root并使用alter pluggable database语句来指定生成xml文件或.pdb文件。当指定xml文件后,在卸载完成后生成的xml文件会包含描述应用程序seed的元数据。
SQL> alter pluggable database salesact$seed close immediate instances=all;Pluggable database altered.SQL> select name,open_mode from v$pdbs;NAME OPEN_MODE-------------------------------------------------------------------------------------------------------------------------------- ----------SALESACT READ WRITESALESACT$SEED MOUNTEDSALESAPPPDB READ WRITE3 rows selected.SQL> alter pluggable database salesact$seed unplug into '/tts/plug/salesact_seed.xml';Pluggable database altered.
删除应用程序seed
当不再需要应用程序seed时,可以执行drop pluggable database语句来删除。当删除应用程序seed时,CDB的控制文件会被修改来删除与被删除应用程序seed的所有相关信息,但是归档重做日志与备份不会被删除,但可以使用RMAN来删除它们。
SQL> drop pluggable database salesapppdb including datafiles;Pluggable database dropped.
创建应用程序PDB
可以在应用程序root容器中执行create pluggable database语句来创建应用程序PDB。创建应用程序pdb与在CDB root中创建PDB都是使用相同的SQL语句。当在应用程序root中执行create pluggable database语句时新创建的PDB为应用程序PDB。SQL语句必须在应用程序root中执行并且对应用程序root中所定义的应用程序数据库有显式依赖性。创建应用程序PDB的操作如下:
1.在SQL*Plus中,确保当前容器为应用程序root
2.执行create pluggable database语句。在应用程序PDB完成创建之后,它处于mounted模式并且状态为NEW。可以通过查询v$pdbs视图的open_mode列来查看应用程序pdb的打开模式,可以通过查询cdb_pdbs或dba_pdbs视图的status列来查看应用程序pdb的状态。对于新创建的应用程序PDB也会创建一个缺省的服务名,服务名与应用程序PDB同名并且可以被用来访问应用程序PDB。
3.以读写模式来打开应用程序PDB
4.为了将新的应用程序PDB集成到应用程序容器必须以读写模式来打开新的应用程序PDB。如果试图以只读模式来打开应用程序PDB将会返回错误信息。在应用程序PDB以读写模式打开后它的状态将变为NORMAL。
5.切换容器为应用程序PDB
6.执行alter pluggable database ... sync来同步应用程序PDB。同步使用应用程序PDB来实例化应用程序PDB中的一个或多个应用程序root中的应用程序。
7.关闭应用程序PDB,然后以只读模式打开。
8.备份应用程序PDB。