使用oracle SCN(System Changed Number 系统变更数) 恢复数据的方法
如果不小心删除了oracle数据库中的数据 恢复的方法可以使用flashback(闪回查询)
下面用到是的使用SCN恢复
以下为测试数据
创建表USPTOTEST
create table USPTOTEST
(
ID varchar(10) not null,
NAME varchar(20) default '' not null ,
primary key (ID)
)
commit;
插入测试数据
insert into USPTOTEST (id, name)
values ('1', 'a');
insert into USPTOTEST (id, name)
values ('2', 'b');
insert into USPTOTEST (id, name)
values ('3', 'c');
查询变更数
select dbms_flashback.get_system_change_number from dual;
36042924
删除所有数据
DELETE FROM usptotest WHERE 1=1
这是已经没有数据 要恢复到前面有数据状态 可以使用
INSERT INTO usptotest SELECT * FROM usptotest AS OF SCN 36042924;
这时候前面的数据就恢复了,但是在实际情况中不知道前面的系统变更数是多少 可以先自己按照时间和操作多少进行估算
SELECT * FROM usptotest AS OF SCN 36042362;
根据查询结果来判断
暂时知道这么多 其实SCN的用法还有很多 这只是冰山一角
如果不小心删除了oracle数据库中的数据 恢复的方法可以使用flashback(闪回查询)
下面用到是的使用SCN恢复
以下为测试数据
创建表USPTOTEST
create table USPTOTEST
(
ID varchar(10) not null,
NAME varchar(20) default '' not null ,
primary key (ID)
)
commit;
插入测试数据
insert into USPTOTEST (id, name)
values ('1', 'a');
insert into USPTOTEST (id, name)
values ('2', 'b');
insert into USPTOTEST (id, name)
values ('3', 'c');
查询变更数
select dbms_flashback.get_system_change_number from dual;
36042924
删除所有数据
DELETE FROM usptotest WHERE 1=1
这是已经没有数据 要恢复到前面有数据状态 可以使用
INSERT INTO usptotest SELECT * FROM usptotest AS OF SCN 36042924;
这时候前面的数据就恢复了,但是在实际情况中不知道前面的系统变更数是多少 可以先自己按照时间和操作多少进行估算
SELECT * FROM usptotest AS OF SCN 36042362;
根据查询结果来判断
暂时知道这么多 其实SCN的用法还有很多 这只是冰山一角