Oracle的闪回归档
场景需求,由于管理数据库的一些核心表,在实施初期会有人为误删除的问题。Oracle 11gR2提供了闪回归档的特性,可以保证不用RMAN来恢复误删除的数据。实践如下:
1.创建一个公共的闪回表空间。
用于各个业务模块都可以使用的闪回区域。
create TABLESPACE ARP_FLASH_ARC01 DATAFILE '/u01/app/oradata/oradb/arp_flash_arc01.dbf' SIZE 1024M AUTOEXTEND ON NEXT 512M MAXSIZE 20480M;
2.创建闪回归档
create flashback archive arp_fda1 tablespace ARP_FLASH_ARC01 retention 7 day;
3.对于核心业务表进行闪回归档
核心财务模块:
alter table fin.bg_exe_budget flashback archive arp_fda1;
工作流模块。
alter table EOS_WORKFLOW.WFWIPARTICIPANT flashback archive arp_fda1;
公文模块:
alter table od.T_OD_ARCHIVES_IN flashback archive arp_fda1;
人事模块:
alter table hr.T_HR_ORG_UNIT flashback archive arp_fda1;
如上,只是伪案例,按照需求给与。
4.查看哪些表使用了闪回归档
SYS@oradb> select * from dba_flashback_archive_tables;
TABLE_NAME OWNER_NAME
------------------------------ ------------------------------
FLASHBACK_ARCHIVE_NAME
------------------------------------------------------------------------------------------------------------------------
ARCHIVE_TABLE_NAME STATUS
----------------------------------------------------- -------------
BG_EXE_BUDGET FIN
ARP_FDA1
SYS_FBA_HIST_116707 ENABLED
BG_ITEM FIN
ARP_FDA1
SYS_FBA_HIST_116696 ENABLED
AR_BILL FIN
ARP_FDA1
SYS_FBA_HIST_116779 ENABLED
AR_BILL_BALANCE FIN
ARP_FDA1
SYS_FBA_HIST_116716 ENABLED
5.查看ARP_FLASH_ARC01表空间的使用情况。
col tablespace_name format a10;
col file_name format a30;
col total_space format a10;
SELECT tablespace_name,
file_name,
round(bytes/(1024*1024*1024), 2)||' GB' total_space
FROM dba_data_files
where tablespace_name='ARP_FLASH_ARC01';
TABLESPACE FILE_NAME TOTAL_SPAC
---------- ------------------------------ ----------
ARP_FLASH_ /u01/app/oradata/oradb/arp_fla 1 GB
ARC01 sh_arc01.dbf
6.清除归档的数据
SYS@oradb> alter flashback archive arp_fda1 purge before timestamp (systimestamp - interval '3' day);
闪回档案已变更。
7.使用闪回查询语句。
1).闪回查询
select * from ar_bill
as of timestamp to_timestamp('2020-01-03 16:30:00', 'yyyy-mm-dd hh24:mi:ss') where id='7F000001FFFFFFFF8EE2F28600000028'
2).闪回恢复
insert into ar_bill(
select * from ar_bill
as of timestamp to_timestamp('2020-01-03 16:30:00', 'yyyy-mm-dd hh24:mi:ss') where id='7F000001FFFFFFFF8EE2F28600000028'
);