实验环境
搭建平台:VMware Workstation
OS:OL 7.5
DB:Oracle 12.2.0.1
具体步骤
闪回PDB就是闪回数据库,思路和闪回非PDB环境类似,都是恢复到某个还原点,所以第一步我们先创建一个还原点:
1. 创建还原点
有两种等价的方式:
(1)在CDB创建
SQL> alter session set container=CDB$ROOT; ##切换到根容器
SQL> create restore point rsp1 for pluggable database pdbtest1; ##需要指定PDB
SQL> create restore point rsp2 for pluggable database pdbtest1 guarantee flashback database; ##创建一个保证还原点的语法, 保证还原点是不会随着时间从控制文件中删除和必须明确删除。
(2)直接在PDB创建
SQL> alter session set container=pdbtest1; ##切换到PDB
SQL> create restore point rsp1;
SQL> create restore point rsp2 guarantee flashback database; ##创建一个保证还原点的语法
注:
如果是共享undo,闪回会创建辅助实例,所以建议使用以下步骤创建clean还原点,来避免闪回时创建辅助实例( 12.2及以上版本建议使用本地undo(local undo),与其他PDB表空间互不干扰):
SQL> alter pluggable database pdbtest1 close; ##需要先停库
SQL> create clean restore point BEFORE_UPGRADE for pluggable database pdbtest1; ##创建clean还原点
(3)检查还原点信息
SQL> select NAME,TIME,SCN,pdbtest_RESTORE_POINT,GUARANTEE_FLASHBACK_DATABASE from V$RESTORE_POINT;
或者RMAN查看
$ rman target /
RMAN> list restore point all;
2. 闪回PDB
(1)share undo的两种不同情况的闪回方法
1) 对于在线直接创建还原点
SQL> alter pluggable database pdbtest1 close;
SQL> flashback pluggable database pdbtest1 to restore point rsp1 auxiliary destination '/u01/app/oracle/oradata/stage'; ##必须添加“ auxiliary destination”关键字!此时会创建一个辅助实例,但对于clean还原点不需要这个关键字
SQL> alter pluggable database pdbtest1 open resetlogs;
2) 对于停库创建clean还原点
SQL> alter pluggable database pdbtest1 close;
SQL> flashback pluggable database pdbtest1 to clean restore point rsp1;
SQL> alter pluggable database pdbtest1 open resetlogs;
(2)local undo的闪回方法
SQL> alter pluggable database pdbtest1 close;
SQL> flashback pluggable database pdbtest1 to restore point rsp1;
SQL> alter pluggable database pdbtest1 open resetlogs;