合 Oracle 12.2新特性--PDB级闪回数据库(Flashback PDB)
在 Oracle Database 12.1 中,闪回数据库操作仅限于 CDB , 从 Oracle Database 12.2 开始 支持 CDB 与 PDB 数据库的闪回。在 12 . 2 版本新特性引入了 PDB 级别的 flashback ,更加快速方便,可以使用 RMAN 和 SQL 两种方式实现,且闪回后原 PDB 的备份仍然有效。
可以对多租户数据库中的单个 PDB 执行闪回操作。对特定的 PDB 执行闪回数据库操作只会修改与这个 PDB 相关文件中的数据。 CDB 中的其它 PDB 不受影响处于可读写状态。如果使用还原点,在执行闪回数据库操作时可以使用 CDB 还原点, PDB 还原点 , PDB 干净 还原点或 PDB 受保证的还原点。
PDB 中支持的闪回数据库方式:
1. 还原点
2.scn
3.timestamp
1 | restore point就是用户创建一个自定义名称与scn相关的时间点,信息存储在control file中,目前分3种还原点:Normal Restore Point,Guaranteed Restore Point,Clean Restore Point。``Normal和Guaranteed的区别是:Guaranteed可以保证restore point后的闪回日志不会被自动删除除非手动明确删除,而nomal可能会因为flashback retention时间而age ``out``。`` ` `PDB的还原点种类:``1.Normal Restore Point:``create` `restore point pdb1_point1;``2.Guaranteed Restore Point:``create` `restore point pdb1_point1 guarantee flashback ``database``;``3.Clean Restore Point:只用于使用shared undo模式时如12.1中没有``local` `undo``在需要设定干净还原点的PDB容器下先shutdown immediate,然后再创建干净还原点。``3.1 clean normal restore point:``create` `clean restore point cdb1_before_changes;``3.2 clean guaranteed restore point:``create` `clean restore point cdb1_before_changes guarantee flashback ``database``;``在PDB中执行,如果是CDB中执行的话,在对应代码后面多添加``for` `pluggable ``database` `pdb_name指定PDB名称``flashback backup在12.2中有rman和SQL两种方式闪回,当使用shared undo里需要使用rman,前提需要在pdb ``close` `immediate后创建clean resotre point,过程中会自动创建辅助实例CDB和PDB PITR;使用``local` `undo时,就可以使用SQL命令更佳快速,而且只是pdb数据文件原位置闪回,并应用undo,在做之前创建任意一种restore point都可以,也不需要辅助实例。``只能还原到还原点和``open` `resetlogs之间的时间,也就是只能向前还原。如果向后还原同样会提示下面的错误:``ORA-39889: Specified System Change Number (SCN) ``or` `timestamp` `is` `in` `the middle ``of` `a previous PDB RESETLOGS operation.`` ` ` ` ` ``常用SQL``col ``name` `for` `a30``select` `SCN,to_char(``time``,``'yyyy-mm-dd hh24:mi:ss'``) ``time``,``NAME``,STORAGE_SIZE,RESTORE_POINT_TIME,GUARANTEE_FLASHBACK_DATABASE,PDB_RESTORE_POINT,CLEAN_PDB_RESTORE_POINT,CON_ID ``from` `v$restore_point;`` ` `alter` `pluggable ``database` `pdbanbob ``close``;``FLASHBACK PLUGGABLE ``DATABASE` `pdbanbob ``TO` `TIMESTAMP` `to_timestamp(``'2017-03-21 16:13:01'``,``'yyyy-mm-dd hh24:mi:ss'``);``flashback pluggable ``database` `pdb01 ``to` `scn 1628859;``alter` `pluggable ``database` `pdbanbob ``open` `resetlogs;``如果使用的shared undo模式下PDB闪回数据库,语法有点不同,就是你需要制定辅助实例的位置。``SQL>flashback pluggable ``database` `pdb_name ``to` `scn the_scn auxiliary destination ``'/XXX/auxiliary'``;``SQL>flashback pluggable ``database` `pdb_name ``to` `restore point restore_point auxiliary destination ``'/XXX/auxiliary'``;``PDB级别的闪回,并没有改变整个数据库的INCARNATION,从新增加的v$pdb_incarnation视图可以确认。``select` `INCARNATION#,RESETLOGS_TIME ``from` `v$database_incarnation;``select` `DB_INCARNATION#,PDB_INCARNATION#,INCARNATION_TIME,con_id ``from` `v$pdb_incarnation ``order` `by` `3; |
闪回数据库在10G版本时引入,当数据产生逻辑错误或升级失败时,用于 ,在12C 多租户结构中增加了PDB概念,在恢复时通常为了节约时间和一致性做最小粒度的恢复,在12.1版本如果对Flashback database需要创建辅助实例和CDB(只能是CDB级),有些像 ,在12C r2版本新特性引入了PDB级别的flashback,更加快速方便, 可以使用RMAN和SQL两种方式实现, 且闪回后原PDB的备份仍然有效。
PDB闪回有几个基本的前提条件:
1,enable local undo
2,enable archivelog mode
3,enable flashback database;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | QL> startup upgrade SQL> show parameter db_reco PARAMETER_NAME TYPE VALUE ---------------------------------- ----------- -------------- db_recovery_file_dest string db_recovery_file_dest_size big integer 0 SQL> show parameter flashback PARAMETER_NAME TYPE VALUE ---------------------------------- ----------- -------------- db_flashback_retention_target integer 1440 SQL> alter system set db_recovery_file_dest_size=1G; System altered. SQL> alter system set db_recovery_file_dest='/u01/arch_anbob'; System altered. SQL> alter database flashback on; Database altered. SQL> alter database local undo on; Database altered. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 15 Next log sequence to archive 17 Current log sequence 17 SQL> shutdown immediate; SQL> startup |
Note:
flashback database, local undo ,archivelog这些属性都是CDB级别的, 所以不允许在部分PDB级修改。