-- 误drop table 恢复

--查看回收站中是否有被误删的表
select * from dba_recyclebin where original_name='TEST'
--闪回
flashback table schema1.table1 to before drop

-- 回收站

-- 查询Recycle Bin开闭状态
SQL> show parameter recyclebin;
-- 查询Recycle Bin
SELECT * FROM RECYCLEBIN; --用户权限
SELECT * FROM DBA_RECYCLEBIN; -- DBA权限
-- 删除Recycle Bin中对象
PURGE TABLE schema.table
-- 清空某一用户的所有表空间下的对象
PURGE RECYCLEBIN;
-- DBA清空回收站
PURGE DBA_RECYCLEBIN;
--清空当前用户回收站
purge recyclebin;

-- 创建要分析的日志文件列表

exec dbms_logmnr.add_logfile('/u01/app/oracle/oradata/CDBRAC/redo01.log', dbms_logmnr.new);
-- 新建一个LogMiner 会话
begin
dbms_logmnr.add_logfile(LogFileName=>'+FRA/SITDB/ONLINELOG/group_1.258.1090940317',Options=>dbms_logmnr.NEW);
END;
/




-- 添加日志到要分析的日志文件列表
BEGIN
dbms_logmnr.add_logfile(LogFileName=>'+FRA/SITDB/ONLINELOG/group_2.259.1090940317',Options=>dbms_logmnr.ADDFILE);
dbms_logmnr.add_logfile(LogFileName=>'+FRA/SITDB/ONLINELOG/group_3.257.1090940317',Options=>dbms_logmnr.ADDFILE);
END;
/

-- 进行日志分析

一. -- 分析归档日志的重做记录

begin 
dbms_logmnr.start_logmnr(Options=>dbms_logmnr.dict_from_online_catalog);
end ;
/
二.
-- 分析指定时间的重做记录
begin 
dbms_logmnr.start_logmnr(startTime => to_date('2022-12-02 15:55:00','yyyy-mm-dd hh24:mi:ss'),
endTime => to_date('2022-12-02 16:58:00','yyyy-mm-dd hh24:mi:ss'),
Options => dbms_logmnr.DICT_FROM_ONLINE_CATALOG+dbms_logmnr.CONTINUOUS_MINE) ;
end ;
/

-- 观察分析结果(v$logmnr_contents)

SELECT USERNAME AS usr,SQL_REDO,SQL_UNDO FROM  V$LOGMNR_CONTENTS WHERE SEG_OWNER ='U1';
✒ ✏ #TABLE_NAME  修改表的名称/SEG_NAME  修改数据段的名称

-- 终止日志分析事务

begin 
dbms_logmnr.end_logmnr();
end;
/     
--此时PGA内存区域被清除,分析结果也随之不再存在

-- Delete误删数据恢复

一. 
-- 以下语句找出删除的数据
select * from U1.T3 as of timestamp to_timestamp('2022-11-29 11:37:32','yyyy-mm-dd hh24:mi:ss');
-- 把删除的数据重新插入原表
insert into U1.T3 (select * from U1.T3 as of timestamp to_timestamp('2022-11-29 14:57:32','yyyy-mm-dd hh24:mi:ss') where id=3);
二. 
-- 使用闪回整个表的方式来恢复数据(用户要有flash any table权限)
ALTER TABLE U1.T3 ENABLE ROW MOVEMENT;
flashback table U1.T3 to timestamp to_timestamp('2022-11-29 11:37:32','yyyy-mm-dd hh24:mi:ss');
ALTER TABLE U1.T3 DISABLE ROW MOVEMENT;
#首先获取删除数据的时间点
select sql_text,first_load_time from v$sql where sql_text like '%table_name%';