Oracle 闪回机制(恢复错删的数据)
2016-11-17 08:49
253 查看
闪回技术之一 Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据
闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上。实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO命令就可以了解这些信息。用户对表的数据的修改操作,都记录在撤销表空间中,这为表的闪回提供的数据恢复的基础。
修改记录被提交到undo表空间中的默认保留时间为900秒,用户可以在这900秒的时间内对表的进行闪回操作,从而将表中的数据恢复的修改前的状态。
如上图显示的默认900秒,我们通过sql来修改这个默认时间为1200:
flashtable的语法:
flashback table [schema.]table_name to {[before drop [rename to new_table_name]] | [SCN | TIMESTAMP] expr [enable | desable] triggers}
schema:模式名 table_name :表名
before drop 表示回复到删除之前
rename new_table_name 重新定义表名称
timestamp 时间戳,包括年月日时分秒
expr 制定一个值或表达式
enable triggers 触发器恢复后,呈启用状态
disabled triggers 触发器回复后,呈禁用状态,默认情况下为此选项。
下面演示一个示例:
首先在数据库中创建一个表,并插入3条数据
SQL>create table tb_flash1(id number primary key,content varchar2(40));
表已创建。
SQL> insert into tb_flash1(id,content)
2 select 1,'第一行数据' from dual
3 union all
4 select 2,'第二行数据' from dual
5 union
6 select 3,'第三行数据' from dual
7 /
已创建3行。
SQL> commit
2 /
提交完成。
查询刚才插入的数据:
SQL> select * from tb_flash1
2 /
ID CONTENT
---------- ----------------------------------------
1 第一行数据
2 第二行数据
3 第三行数据
假设现在误删除一条id=2的数据:
SQL> delete from tb_flash1 where id=2
2 /
已删除 1 行。
SQL> commit;
提交完成。
再次查询,表中只剩两条记录:
SQL> select * from tb_flash1
2 /
ID CONTENT
---------- ----------------------------------------
1 第一行数据
3 第三行数据
接下来对刚删除的数据执行恢复操作:
1、开启表的移动功能
SQL> alter table tb_flash1 enable row movement
2 /
表已更改。
2、将表恢复到删除数据的时间之前(注意这个时间尽量与您删除数据的时间相同或稍微靠前)
SQL> flashback table tb_flash1 to timestamp
2 to_timestamp('2013-01-26 15:58:30','yyyy-mm-dd hh24:mi:ss')
3 /
闪回完成。
SQL> select * from tb_flash1;
ID CONTENT
---------- ----------------------------------------
1 第一行数据
2 第二行数据
3 第三行数据
至此数据已恢复。
下面介绍恢复到scn
将时间戳转换到scn
SQL> select timestamp_to_scn(to_timestamp('2013-01-26 15:58:30','yyyy-mm-dd hh24
:mi:ss')) from dual;
TIMESTAMP_TO_SCN(TO_TIMESTAMP('2013-01-2615:58:30','YYYY-MM-DDHH24:MI:SS'))
---------------------------------------------------------------------------
1263136
SQL> flashback table tb_flash1 to 1263136;
闪回完成。闪回完成。闪回完成。
闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上。实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO命令就可以了解这些信息。用户对表的数据的修改操作,都记录在撤销表空间中,这为表的闪回提供的数据恢复的基础。
修改记录被提交到undo表空间中的默认保留时间为900秒,用户可以在这900秒的时间内对表的进行闪回操作,从而将表中的数据恢复的修改前的状态。
如上图显示的默认900秒,我们通过sql来修改这个默认时间为1200:
flashtable的语法:
flashback table [schema.]table_name to {[before drop [rename to new_table_name]] | [SCN | TIMESTAMP] expr [enable | desable] triggers}
schema:模式名 table_name :表名
before drop 表示回复到删除之前
rename new_table_name 重新定义表名称
timestamp 时间戳,包括年月日时分秒
expr 制定一个值或表达式
enable triggers 触发器恢复后,呈启用状态
disabled triggers 触发器回复后,呈禁用状态,默认情况下为此选项。
下面演示一个示例:
首先在数据库中创建一个表,并插入3条数据
SQL>create table tb_flash1(id number primary key,content varchar2(40));
表已创建。
SQL> insert into tb_flash1(id,content)
2 select 1,'第一行数据' from dual
3 union all
4 select 2,'第二行数据' from dual
5 union
6 select 3,'第三行数据' from dual
7 /
已创建3行。
SQL> commit
2 /
提交完成。
查询刚才插入的数据:
SQL> select * from tb_flash1
2 /
ID CONTENT
---------- ----------------------------------------
1 第一行数据
2 第二行数据
3 第三行数据
假设现在误删除一条id=2的数据:
SQL> delete from tb_flash1 where id=2
2 /
已删除 1 行。
SQL> commit;
提交完成。
再次查询,表中只剩两条记录:
SQL> select * from tb_flash1
2 /
ID CONTENT
---------- ----------------------------------------
1 第一行数据
3 第三行数据
接下来对刚删除的数据执行恢复操作:
1、开启表的移动功能
SQL> alter table tb_flash1 enable row movement
2 /
表已更改。
2、将表恢复到删除数据的时间之前(注意这个时间尽量与您删除数据的时间相同或稍微靠前)
SQL> flashback table tb_flash1 to timestamp
2 to_timestamp('2013-01-26 15:58:30','yyyy-mm-dd hh24:mi:ss')
3 /
闪回完成。
SQL> select * from tb_flash1;
ID CONTENT
---------- ----------------------------------------
1 第一行数据
2 第二行数据
3 第三行数据
至此数据已恢复。
下面介绍恢复到scn
将时间戳转换到scn
SQL> select timestamp_to_scn(to_timestamp('2013-01-26 15:58:30','yyyy-mm-dd hh24
:mi:ss')) from dual;
TIMESTAMP_TO_SCN(TO_TIMESTAMP('2013-01-2615:58:30','YYYY-MM-DDHH24:MI:SS'))
---------------------------------------------------------------------------
1263136
SQL> flashback table tb_flash1 to 1263136;
闪回完成。闪回完成。闪回完成。
相关文章推荐
- 数据恢复[Oracle] Flashback闪回机制
- Oracle误操作--数据被Commit后的数据回退恢复(闪回)
- oracle数据闪回功能(恢复误删除的表信息)
- 循序渐进oracle第8章:Oracle的闪回特性之恢复truncate删除表的数据
- 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)
- oracle数据误操作恢复【flashback闪回操作】
- Oracle闪回查询恢复delete删除数据
- 用Oracle闪回功能恢复偶然丢失的数据
- 使用oracle闪回查询功能恢复之前删除的数据
- 用Oracle闪回功能恢复偶然丢失的数据
- oracle恢复删除的数据 闪回
- 用Oracle闪回功能(flashback)恢复删除的数据
- oracle删除数据后如何恢复(闪回数据)-误删除数据提交后如何立即恢复
- 用Oracle闪回功能(flashback)恢复删除的数据---Oracle;闪回;回滚段;数据恢复
- ORACLE闪回数据恢复初探(尚未成功)
- oracle flashback——oracle数据闪回实战,及恢复数据到指定的时间戳——timestamp
- 用Oracle闪回功能恢复偶然丢失的数据--数据被误删除了,多亏了万能的oracle,....后怕
- Oracle的闪回特性之恢复truncate删除表的数据
- Oracle闪回查询恢复delete删除数据
- Oracle闪回查询恢复delete删除数据