东方ic 广州:Oracle删除表恢复
来源:百度文库 编辑:中财网 时间:2024/04/29 12:41:15
恢复当天删除了表而没有记住表的名称 存储过程如下:
create or replace procedure proc_databack (deletetime in varchar2)
as
--把当天已经删除的信息查询出来放入游标
cursor mycursor is(select object_name from recyclebin where droptime like deletetime);
temp_emp varchar2(2000);
vflash_back varchar2(2000);
begin
open mycursor;
loop
fetch mycursor into temp_emp;
exit when mycursor%notfound;
--构建恢复语句
vflash_back:='flashback table "'||temp_emp||'" to before drop';
--循环恢复被删除的表,直到全部恢复完成
execute immediate vflash_back;
end loop;
close mycursor;
end;
--调用存储过程
--比如今天是2011-12-02,那么写法如下:
/*
declare
time varchar2(20);
begin
time:='2011-12-02%';
proc_databack (time);
end;
*/ 1. 表查询闪回
create table xcp as (select * from b_za_bzdzkxx);
select * from xcp;
select count(1) from xcp;--22001
select count(1) from xcp t where t.dzbh like '510521%';--7011
delete from xcp t where t.dzbh like '510521%';
select count(1) from xcp;--14990
--查找指定时间点前的数据
select count(1) from xcp as of timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--22001
select * from xcp for update;--添加一条记录
select count(1) from xcp;--14991
--恢复指定时间点的前delete数据(将删除恢复时间点后面的数据)
alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
--恢复指定时间点的前delete数据,并保留恢复时间点后面的数据
create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss'));
select * from xcp2;--临时表
alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
insert into xcp select * from xcp2 --将临时表的数据再插入到源表
select count(1) from xcp;--22002
2.删除闪回[10g+]
删除闪回为删除oracle 10G提供了一个数据库安全机制,当用户删除一个表时,oracle 10G会将该表放到回收站中,回收站中的对象一直会保留,直到用户决定永久删除它们或出现表空间的空间不足时才会被删除。回收站是一个虚拟容器,用于存储所有被删除的对象。数据字典user_tables中的列dropped表示被删除的表,查询方法如下:
select table_name,dropped from user_tables;
--设置数据库是否启用回收站
alert session set recyclebin = off;
--查询回收站对象
select * from recyclebin;select * from user_recyclebin;select * from dba_recyclebin;
drop table xcp;
select count(1) from xcp;--0
--恢复drop的表
flashback table xcp to before drop;
select count(1) from xcp;--22001
如果不知道原表名,可以直接使用回收站中的名称进行闪回..
flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;在回收的同时可以修改表名
flashback table " BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1;
--真正删除一个表,而不进入回收站,可以在删除表时增加purge选项
drop table xcp1 purge;
--也可以从回收站永久性删除表
purge table xcp1;
--删除当前用户回收站
purge recyclebin
--删除全体用户在回收站的资源
purge dba_resyclebin
3.数据库闪口 [10g+]
使用数据库闪回功能,可以使数据库回到过去某一状态,语法如下:
sql: alter database flashback on;
sql: flashback database to scn 46963;
sql: flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss');
create or replace procedure proc_databack (deletetime in varchar2)
as
--把当天已经删除的信息查询出来放入游标
cursor mycursor is(select object_name from recyclebin where droptime like deletetime);
temp_emp varchar2(2000);
vflash_back varchar2(2000);
begin
open mycursor;
loop
fetch mycursor into temp_emp;
exit when mycursor%notfound;
--构建恢复语句
vflash_back:='flashback table "'||temp_emp||'" to before drop';
--循环恢复被删除的表,直到全部恢复完成
execute immediate vflash_back;
end loop;
close mycursor;
end;
--调用存储过程
--比如今天是2011-12-02,那么写法如下:
/*
declare
time varchar2(20);
begin
time:='2011-12-02%';
proc_databack (time);
end;
*/ 1. 表查询闪回
create table xcp as (select * from b_za_bzdzkxx);
select * from xcp;
select count(1) from xcp;--22001
select count(1) from xcp t where t.dzbh like '510521%';--7011
delete from xcp t where t.dzbh like '510521%';
select count(1) from xcp;--14990
--查找指定时间点前的数据
select count(1) from xcp as of timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--22001
select * from xcp for update;--添加一条记录
select count(1) from xcp;--14991
--恢复指定时间点的前delete数据(将删除恢复时间点后面的数据)
alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
--恢复指定时间点的前delete数据,并保留恢复时间点后面的数据
create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss'));
select * from xcp2;--临时表
alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
insert into xcp select * from xcp2 --将临时表的数据再插入到源表
select count(1) from xcp;--22002
2.删除闪回[10g+]
删除闪回为删除oracle 10G提供了一个数据库安全机制,当用户删除一个表时,oracle 10G会将该表放到回收站中,回收站中的对象一直会保留,直到用户决定永久删除它们或出现表空间的空间不足时才会被删除。回收站是一个虚拟容器,用于存储所有被删除的对象。数据字典user_tables中的列dropped表示被删除的表,查询方法如下:
select table_name,dropped from user_tables;
--设置数据库是否启用回收站
alert session set recyclebin = off;
--查询回收站对象
select * from recyclebin;select * from user_recyclebin;select * from dba_recyclebin;
drop table xcp;
select count(1) from xcp;--0
--恢复drop的表
flashback table xcp to before drop;
select count(1) from xcp;--22001
如果不知道原表名,可以直接使用回收站中的名称进行闪回..
flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;在回收的同时可以修改表名
flashback table " BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1;
--真正删除一个表,而不进入回收站,可以在删除表时增加purge选项
drop table xcp1 purge;
--也可以从回收站永久性删除表
purge table xcp1;
--删除当前用户回收站
purge recyclebin
--删除全体用户在回收站的资源
purge dba_resyclebin
3.数据库闪口 [10g+]
使用数据库闪回功能,可以使数据库回到过去某一状态,语法如下:
sql: alter database flashback on;
sql: flashback database to scn 46963;
sql: flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss');
急!!!! ORACLE数据恢复!!!
Oracle误删除问题
oracle 如何知道是谁删除了表中的数据
如何在删除ORACLE之后删除 ORACLE 中的 SID?
手动怎样完全删除oracle?
手动在文件夹下错误删除了ORACLE某个表空间 ORACLE不能正常使用 如何解决
Oracle数据远程备份与远程恢复
关于重新安装oracle后恢复数据
要修改oracle中表列的大小是否一定要删除表中的数据
oracle如何删除基表中与第二张表相同的数据
Windows 2000下如何彻底删除Oracle?
oracle级联删除触发器不知道写?
oracle 锁表怎么办
oracle表的导出
ORACLE 中英文对照表
oracle无法创建表
Oracle数据库如何导出表?
查看ORACLE数据库中的表
文件删除如何恢复?
三茗一键恢复怎么删除
误删除怎么恢复
怎样恢复删除文件夹
恢复删除文件
删除瑞星数据恢复