当前位置: 首页>数据库>正文

postgresql drop表能找回吗 sqlserver drop表后怎么恢复

对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据必须设置好回收站功能)

 

由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复。当中解决方法是:先重命名已经存在的表名,让后还原删除的表,最后进行数据合并

 

1 重命名已经存在的表

 

spool bak.txt
select 'alter table '||t.original_name||' rename to '||t.original_name||'_bak;',' select count(*) from '||t.original_name||'_bak;' from user_recyclebin t;
spool off

 

那么会把改动表名的语句存放在bak.txt中,我们能够略微调整一下直接执行这个脚本或者是拷贝的sqlplus中执行也能够

 

由于考虑到数据的合并,对于 count(*)大于0 的数据须要进行数据的合并,否则能够不用管它

 

2 使用还原数据库的命令进行数据还原

spool bak2.txt
select ' flashback table  '||t.original_name|| ' to before drop'  from user_recyclebin t;
spool off

 

运行这个bak2.txt中保存的脚本,能够进行数据的还原

 

 

3 进行数据库中表数据的合并()

 

须要注意的有的数据是直接insert to 就能够,可是有的本来是计时器的功能,仅仅须要对数量进行累加就能够,还有的数据时由于没有重建了一份一样的数据,对于这种数据就不须要管他

 

4 重建索引 


对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能)

 

由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复。当中解决方法是:先重命名已经存在的表名,让后还原删除的表,最后进行数据合并

 

1 重命名已经存在的表

 

spool bak.txt
select 'alter table '||t.original_name||' rename to '||t.original_name||'_bak;',' select count(*) from '||t.original_name||'_bak;' from user_recyclebin t;
spool off

那么会把改动表名的语句存放在bak.txt中,我们能够略微调整一下直接执行这个脚本或者是拷贝的sqlplus中执行也能够

 

由于考虑到数据的合并,对于 count(*)大于0 的数据须要进行数据的合并,否则能够不用管它

 

2 使用还原数据库的命令进行数据还原

spool bak2.txt
select ' flashback table  '||t.original_name|| ' to before drop'  from user_recyclebin t;
spool off

 

运行这个bak2.txt中保存的脚本,能够进行数据的还原

 

 

3 进行数据库中表数据的合并()

 

须要注意的有的数据是直接insert to 就能够,可是有的本来是计时器的功能,仅仅须要对数量进行累加就能够,还有的数据时由于没有重建了一份一样的数据,对于这种数据就不须要管他

 

4 重建索引 


https://www.xamrdz.com/database/6y31951359.html

相关文章: