使用闪回查询找到误删除的数据
时间:2016-12-09 20:25 来源:linux.it.net.cn 作者:IT
在oracle10G以后出现的闪回特性,可以让我们在一些情况下方便的找回我们错误删除的数据。
1.undo_retention参数默认900秒,很多时候我们需要调整这个参数如
alter
system
set
undo_retention=18000 sid=
'*'
需要注意的是如果RAC环境中,这样写会造成其他的节点挂起,需要使用下面的办法
alter
system
set
undo_retention=18000 sid=
'RACDB1'
;
alter
system
set
undo_retention=18000 sid=
'RACDB2'
;
调大这个参数会增加undo表空间的扩展,大家需要注意
2.演示找回错误删除的记录(注意,数据库必须处于归档模式下,非归档不能使用)
--1.创建测试用户
create
user
usr1 identified
by
usr1
default
tablespace app1;
--2.创建测试表
conn usr1/usr1
create
table
test (id
int
,
name
char
(10));
--3.创建测试数据
insert
into
test(1,
'test1'
);
insert
into
test(2,
'test2'
);
commit
;
---提交写入redo log file
conn sys/oracle
alter
system switch logfile;
--手工切换日志,写入归档日志,实际中如果得到条件会自动触发
模式删除操作,usr1用户的
delete
from
test
where
id=1;
--这里需要手工触发归档,实际中不需要,因为其他操作可能触发
conn sys/oracle
alter
system switch logfile;
进行恢复操作
--1.首先查询归档日志的scn号
select
name
,first_change#,first_time
from
v$archived_log
order
by
3
desc
/opt/oracle/oradata/orcl/archive1/orcl_1_7_810405035.dbf 1733071 2013-3-20 16:16:21
/opt/oracle/oradata/orcl/archive1/orcl_1_6_810405035.dbf 1731283 2013-3-20 15:52:51
/opt/oracle/oradata/orcl/archive1/orcl_1_5_810405035.dbf 1731279 2013-3-20 15:52:47
--2.查询当前的SCN号
select
dbms_flashback.get_system_change_number
from
dual;
--1734414
--3.尝试使用闪回查询
select * from test as of scn 1733071;看看是否存在删除的数据
select * from test as of scn &scn;输入不同的SCN号来检查数据
发现1733071 时有数据,创建临时恢复数据表进行操作
create table test_recov as select * from test as of scn 1733071;
其实drop table也可以找回数据的,但是我还没有试验成功,后续会补充上。
除了上面使用闪回的方式直接找到数据外,另外还有一种办法就是使用不完全恢复,但是这种方式需要有一个测试机器,把数据恢复到测试机器上然后进行数据操作。
具体方式就是使用logminer来获取scn号。原理是通过logmnr来获取归档日志中的信息,这里可以获取完整的信息,包括当时使用的语句,操作人信息等,而这些信息是使用v$archived_log所不能直接获取到的,后面我会专门介绍logminer的使用。
(责任编辑:IT)
在oracle10G以后出现的闪回特性,可以让我们在一些情况下方便的找回我们错误删除的数据。 1.undo_retention参数默认900秒,很多时候我们需要调整这个参数如
需要注意的是如果RAC环境中,这样写会造成其他的节点挂起,需要使用下面的办法
调大这个参数会增加undo表空间的扩展,大家需要注意 2.演示找回错误删除的记录(注意,数据库必须处于归档模式下,非归档不能使用)
模式删除操作,usr1用户的
进行恢复操作
--3.尝试使用闪回查询
其实drop table也可以找回数据的,但是我还没有试验成功,后续会补充上。 (责任编辑:IT) |