博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle恢复一个数据表的方法
阅读量:4981 次
发布时间:2019-06-12

本文共 1164 字,大约阅读时间需要 3 分钟。

今天提交给客户方一个sql脚本去跟新历史数据,结果客户那边的部署人员犯了一个错误,直接拿系统账号去部署,结果第一段代码没有执行成功,结果第二段代码却执行成功了,并且已经提交了的,。。。。由于事前没有备份第二段更新表的数据,导致恢复标的数据非常困难,网上查找了半天,现在将找到的办法归纳如下:

1. 执行如下SQL将test_temp表中的数据恢复到2016年7月7号,即脚本被执行之前时间点。

 注意,这里一定要先删除全部数据,否则可能会导致数据重复

 

1 SELECT * FROM DQAQTSW 2  AS OF TIMESTAMP TO_TIMESTAMP('2016-07-07 00:00:00', 3  'yyyy-mm-dd hh24:mi:ss');
1
2
3
4
5
delete
from
test_tmp;
insert
into
test_tmp
select
*
from
test_tmp
as
of
timestamp
to_timestamp(
'2014-05-28 11:00:00'
,
'yyyy-mm-dd hh24:mi:ss'
)
 
commit
;

 

或者得到sync的节点时间,基本和第一种方法是一致的。

1 select timestamp_to_scn(to_timestamp('2014-05-27 11:00:00','YYYY-MM-DD HH:MI:SS')) 2 from dual; 3 或 select * from sys.smon_scn_time  order by time_dp desc;4 得到结果 71547785 然后  5  insert into test_tmp select * from test_tmp AS OF SCN 71547785

注意:

  truncate后的数据是无法恢复的

  truncate table test_temp;

2. 下面看第三种(这种方法需要更高的管理权限,否则没法查询回复数据)

  

1
2
3
4
select
*
from
v$sqlarea ;
SELECT
*
FROM
v$session;
SELECT
*
FROM
v$session a,v$sqlarea b
WHERE
b.ADDRESS = a.PREV_SQL_ADDR;

 

通过这条语句找到的数据是有限的 因为有的用户可能已经断开和oracle的连接了

如果你看到以上方法能够解决你的问题,哪就不要犹豫,快点动 手吧,因为如果动手晚了,之前的操作的数据记录可能就要被覆盖了,因为存储不大的话要被循环使用的

转载于:https://www.cnblogs.com/henuyuxiang/p/6222957.html

你可能感兴趣的文章
Where does Visual Studio look for C++ Header files?
查看>>
Java打包可执行jar包 包含外部文件
查看>>
Windows Phone开发(37):动画之ColorAnimation
查看>>
js中escape,encodeURI,encodeURIComponent 区别(转)
查看>>
sass学习笔记-安装
查看>>
Flask (二) cookie 与 session 模型
查看>>
修改添加网址的教程文件名
查看>>
[BZOJ 1017][JSOI2008]魔兽地图DotR(树形Dp)
查看>>
裁剪图片
查看>>
数据结构实习 problem L 由二叉树的中序层序重建二叉树
查看>>
VS中展开和折叠代码
查看>>
如何确定VS编译器版本
查看>>
设置PL/SQL 快捷键
查看>>
个人阅读作业7
查看>>
转载:深入浅出Zookeeper
查看>>
GMA Round 1 新程序
查看>>
node anyproxy ssi简易支持
查看>>
PHP函数 ------ ctype_alnum
查看>>
HDU 1102 Constructing Roads
查看>>
多线程之ThreadLocal类
查看>>