Oracle闪回truncate删除的表中数据
说明:数据库默认闪回时间为一天
【1】查询恢复设置时间
SQL> show parameter flashback
flashback功能默认为1440分钟,也就一天时间
【2】查看数据库闪回状态是否可用
SQL> select flashback_on fromv$database;
FLASHBACK_ON
-----------
NO
flashback_on为NO,也就是没有开flashback功能,当truncate删除数据时,无法使用flashback
【3】设置flashback_on为开启状态,要求数据库必须在mount状态下打开
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>startup mount
ORACLE 例程已经启动。
Total System Global Area 272629760 bytes
FixedSize 1248476 bytes
VariableSize 109052708 bytes
DatabaseBuffers 155189248 bytes
RedoBuffers 7139328 bytes
数据库装载完毕。
SQL> alter database flashback on;
数据库已更改。
说明:如果数据库为非归档模块,会提示“必须启用介质恢复功能”
解决方法:1)SQL> shutdown immediate;
2)SQL> startup mount;
3)SQL> alter databasearchivelog;
【4】truncate删除表中数据
SQL>truncate table jg_rk;
表被截断。 ----数据被删除
SQL> select * from dept;
未选定行 ----表中数据不存在
【5】恢复删除数据(必须以DBA的身份登陆后)
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>startup mount
ORACLE 例程已经启动。
Total System Global Area 272629760 bytes
FixedSize 1248476 bytes
VariableSize 117441316 bytes
DatabaseBuffers 146800640 bytes
RedoBuffers 7139328 bytes
数据库装载完毕。
SQL> flashback database to timestamp
2 to_timestamp('2010-10-08 13:30:30','yyyy-mm-ddhh24:mi:ss');
闪回完成。
SQL>alter database open read write;
数据库已更改。
SQL>select* fromjg_rk; 可以查看恢复的数据
注意: 一旦resetlogs之后,将不能再flashback至resetlogs之前的时间点。