本文小编为大家详细介绍“Oracle闪回数据库怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Oracle闪回数据库怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在Oracle Database 12.1中,闪回数据库操作仅限于根容器,因此会影响与根容器关联的所有可插拔数据库(PDB)。 Oracle Database 12.2现在支持可插拔数据库的闪回,使闪回数据库在多租户架构中再次相关。

1 启用闪回

将数据库启动到mount阶段,开启闪回,然后open,再启用FLASHBACK

SQL>shutdownimmediateDatabaseclosed.Databasedismounted.ORACLEinstanceshutdown.SQL>STARTUPMOUNTORACLEinstancestarted.TotalSystemGlobalArea1308622848bytesFixedSize8792440bytesVariableSize905971336bytesDatabaseBuffers385875968bytesRedoBuffers7983104bytesDatabasemounted.SQL>alterdatabasearchivelog;Databasealtered.SQL>alterdatabaseopen;Databasealtered.

指定闪回恢复区目录和大小

SQL>altersystemsetdb_recovery_file_dest_size=5G;Systemaltered.SQL>altersystemsetdb_recovery_file_dest='/home/oracle/archivelog';Systemaltered.SQL>alterdatabaseflashbackon;Databasealtered.

关闭闪回

SQL>alterdatabaseflashbackoff;Databasealtered.

查看结果

SQL>SELECTflashback_onFROMv$database;FLASHBACK_ON------------------------------------YES

闪回日志保留的数量是受参数DB_FLASHBACK_RETENTION_TARGET控制的,该参数表示保留时间(分钟),默认为7天。

SQL>showparameterDB_FLASHBACK_RETENTION_TARGENAMETYPEVALUE----------------------------------------------------------------------------------------db_flashback_retention_targetinteger14402 创建还原点

恢复点实际上是记录当时的SCN。要想恢复到之前创建的还原点,要保证还原点之后的闪回日志是完整的。

在CDB级别创建恢复点与non-CDB相同。 以下示例在CDB级别分别创建和删除正常,保证的还原点。

正常的还原点

CREATERESTOREPOINTcdb1_before_changes;DROPRESTOREPOINTcdb1_before_changes;

保证的还原点(Guaranteed restore point)

CREATERESTOREPOINTcdb1_before_changesGUARANTEEFLASHBACKDATABASE;DROPRESTOREPOINTcdb1_before_changes;

下面是在PDB级别创建还原点的几个选项。

SQL>showpdbs;CON_IDCON_NAMEOPENMODERESTRICTED------------------------------------------------------------2PDB$SEEDREADONLYNO3ORCLPDBMOUNTED

–切换到PDB

SQL>altersessionsetcontainer=orclpdb;Sessionaltered.SQL>startupPluggableDatabaseopened.

–正常的还原点

SQL>createrestorepointpdb1_point1;Restorepointcreated.SQL>droprestorepointpdb1_point1;Restorepointdropped.

–保证的还原点(Guaranteed restore point)

SQL>createrestorepointpdb1_point1GUARANTEEFLASHBACKDATABASE;Restorepointcreated.SQL>droprestorepointpdb1_point1;Restorepointdropped.2.1 创建一个干净的还原点

注:如果容器数据库是以本地模式运行的就不用看这个章节。

本地模式运行的容器数据库,闪回PDB不依赖它。但是如果CDB再共享模式下运行,那么闪回到干净的还原点将更有效。这些是当可插拔数据库关闭的时候没有未完成的事务。

语法和上面相似,只是多加了个单词。而且要关闭PDB

如:

切换到PDB下执行:

SQL>altersessionsetcontainer=orclpdb;SQL>shutdownimmediate;

– 干净正常的还原点

SQL>CREATECLEANRESTOREPOINTcdb1_before_changes;SQL>DROPRESTOREPOINTcdb1_before_changes;

– 干净保证的还原点(Guaranteed restore point)

SQL>CREATECLEANRESTOREPOINTcdb1_before_changesGUARANTEEFLASHBACKDATABASE;SQL>DROPRESTOREPOINTcdb1_before_changes;

CDB ROOT下执行:

SQL>ALTERPLUGGABLEDATABASEorclpdbCLOSE;

– 干净正常的还原点

SQL>CREATECLEANRESTOREPOINTcdb1_before_changesFORPLUGGABLEDATABASEorclpdb;SQL>DROPRESTOREPOINTcdb1_before_changes;FORPLUGGABLEDATABASEorclpdb;

– 干净保证的还原点(Guaranteed restore point)

SQL>CREATECLEANRESTOREPOINTcdb1_before_changesGUARANTEEFLASHBACKDATABASEFORPLUGGABLEDATABASEorclpdb;SQL>DROPRESTOREPOINTcdb1_before_changes;FORPLUGGABLEDATABASEorclpdb;SQL>ALTERPLUGGABLEDATABASEorclpdbOPEN;

可以通过查看V$RESTORE_POINT视图中的CLEAN_PDB_RESTORE_POINT列所示。

3 闪回CDB和闪回PDB

闪回CDB如下:

SQL>SHUTDOWNIMMEDIATE;SQL>STARTUPMOUNT;SQL>FLASHBACKDATABASETORESTOREPOINTcdb1_before_changes;ALTERDATABASEOPENRESETLOGS;

– 打开所有PDB

SQL>ALTERPLUGGABLEDATABASEALLOPENRESETLOGS;

闪回还支持多种形式的闪回,如按时间,SCN,或者某个时间点之前。

如:

FLASHBACKDATABASETOTIMESTAMPmy_date;FLASHBACKDATABASETOBEFORETIMESTAMPmy_date;FLASHBACKDATABASETOSCNmy_scn;FLASHBACKDATABASETOBEFORESCNmy_scn;FLASHBACKDATABASETORESTOREPOINTmy_restore_point;

根据数据库运行的模式不同,操作也会有所不同。下面是本地UNDO模式的操作步骤:

SQL>ALTERPLUGGABLEDATABASEorclpdbCLOSE;SQL>FLASHBACKPLUGGABLEDATABASEorclpdbTORESTOREPOINTpdb1_before_changes;SQL>ALTERPLUGGABLEDATABASEorclpdbOPENRESETLOGS;

如果使用的共享UNDO模式,语法有点不同,就是你需要制定辅助实例的位置。

SQL>FLASHBACKPLUGGABLEDATABASEorclpdbTOSCNmy_scnAUXILIARYDESTINATION'/u01/auxiliary';SQL>FLASHBACKPLUGGABLEDATABASEorclpdbTORESTOREPOINTmy_restore_pointAUXILIARYDESTINATION'/u01/auxiliary';4 具体例子:

–创建还原点

SQL>CREATERESTOREPOINTpdb1_before_changesFORPLUGGABLEDATABASEpdb1;

–创建表

SQL>CREATETABLEt1(idNUMBER);SQL>INSERTINTOt1VALUES(1);SQL>COMMIT;SQL>SELECT*FROMt1;ID----------1

闪回到指定还原点

SQL>FlashbackthePDBtotherestorepoint.SQL>ALTERPLUGGABLEDATABASEpdb1CLOSE;SQL>FLASHBACKPLUGGABLEDATABASEpdb1TORESTOREPOINTpdb1_before_changes;SQL>ALTERPLUGGABLEDATABASEpdb1OPENRESETLOGS;

–检查数据是否存在

SQL>SELECT*FROMt1;SELECT*FROMt1*ERRORatline1:ORA-00942:tableorviewdoesnotexist

可以看到已经闪回到创建表之前的那个状态了。

读到这里,这篇“Oracle闪回数据库怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。