一、查询某个时间的数据库表快照
快照默认是保留7天,采集间隔是1小时,这个信息可以从DBA_HIST_WR_CONTROL视图中获得。
以PERSON表为例:
查询2024-5-9 16:00:00PERSON表的数据。
SELECT * FROM PERSON
AS OF TIMESTAMP TO_TIMESTAMP('2024-5-9 16:00:00', 'YYYY-MM-DD HH24:MI:SS');
二、执行回滚语句
回滚PERSON表数据至一天前
FLASHBACK TABLE PERSON TO TIMESTAMP (SYSDATE – INTERVAL '1' DAY);
三、开启数据库快照
查询数据库是否开启闪回
SELECT flashback_on FROM v$database;
开启数据库闪回
ALTER DATABASE FLASHBACK ON;(请参考步骤四步骤执行)
注意:flashback database要求数据库必须处于归档模式,且闪回之后必须使用resetlogs打开数据库
查看数据库的存档模式及闪回是否启用
select log_mode,open_mode,flashback_on from v$database;
四、开始数据库存档模式
1.在命令行使用sqlplus sys/sys as sysdba;登录到sys用户,使用SQL: archive log list 查看当前数据库的存档模式
2.依照下列步骤开启存档模式
使用SQL: alter system set log_archive_start=true scope=spfile; --修改系统的日志方式为存档模式
shutdown immediate; --关闭数据库,因为不能在open状态下进行操作
startup mount; --启动mount实例,但不是启动数据库
alter database archivelog; --更改数据库为存档模式
ALTER DATABASE FLASHBACK ON;--打开数据库闪回(磁盘空间不足会失败)
最后使用SQL: alter database open; --打开数据库
3.关闭存档模式步骤
shutdown immediate;
startup mount;
alter database noarchivelog; --更改数据库为非存档模式