[Oracle]Oracle的闪回归档

时间:2023-03-09 19:27:31
[Oracle]Oracle的闪回归档

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'
);