【Oracle】delete表后commit后怎么找回,方法
有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦
下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据
模拟实验环境:
创建一个新表
SQL> create table www as select * from hr.employees;
Table created.
查看新表是否有数据
SQL> select count(*) from www;
COUNT(*)
----------
107
查看当前的时间,这里时间或者scn有一个就行。后面会有通过scn恢复的案例
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2017-11-13 17:34:45
查找时间戳之前是否有数据
SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:30:45','yyyy-mm-dd hh24:mi:ss');
select count(*) from www as of timestamp to_timestamp('2017-11-13 17:30:45','yyyy-mm-dd hh24:mi:ss')
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
查询下这个时间段的数据是存在的
SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24:mi:ss');
COUNT(*)
----------
107
删除表:
SQL> delete from www;
107 rows deleted.
SQL> commit;
Commit complete.
查看www表是没有数据的
SQL> select * from www;
no rows selected
当前时间查看也是没有数据了
SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:37:45','yyyy-mm-dd hh24:mi:ss');
COUNT(*)
----------
0
我们需要这样做,查看下删除之前的时间,根据删除之前的时间戳找到www表中的数据
SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24:mi:ss');
COUNT(*)
----------
107
查看时间戳发现有数据存在,说明数据可以恢复
SQL> insert into www select * from www as of timestamp to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24:mi:ss');
107 rows created.
SQL> commit;
Commit complete.
数据恢复成功
SQL> select count(*) from www;
COUNT(*)
----------
107
同理,scn也是可以恢复的
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3698087
SQL> create table www as select * from hr.employees;
Table created.
SQL> select count(*) from www;
COUNT(*)
----------
107
查看创建表之后的scn
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3698135
SQL> delete from www;
107 rows deleted.
表中的数据已经没有了
SQL> select count(*) from www;
COUNT(*)
----------
0
SQL> commit;
Commit complete.
通过创建表之后的scn号来查询后,找到了相关数据
SQL> select count(*) from www as of scn 3698135;
COUNT(*)
----------
107
将数据插入到表中即可
SQL> insert into www select * from www as of scn 3698135;
107 rows created.
Commit complete.
SCN
---------------------------------------------------------------------------
13-NOV-17 05.43.11.000000000 PM
SCN
----------
3697660
【Oracle】delete表后commit后怎么找回,方法的更多相关文章
- Oracle误删表空间文件后数据库无法启动
[问题描述]Oracle误删表空间文件后数据库无法启动,报错表空间文件不存在 [解决办法]sqlplus / as sysdba #以dba身份登陆数据库shutdown immediat ...
- oracle多表关联删除的两种方法
oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...
- Oracle system表空间满的暂定解决方法
Oracle system表空间满的暂定解决方法 数据库用的是Oracle Express 10.2版本的.利用Oracle Text做全文检索应用,创建用户yxl时没有初始化默认表空间,在系统开发过 ...
- Oracle 之 表新增字段后修改字段顺序
工作中遇到:在为一个表新增字段后,新增字段在最后,想调整新增字段的位置. 1.原始方法: --新建临时表以存储正确的顺序 create table A_2 as select (column1,col ...
- Oracle数据表被drop后的恢复
对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能) 由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复.当 ...
- oracle 大表删除数据后,回收空间的问题。
在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理. 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据.我们可以把需要保留的数据转移到别的表,然后再把大 ...
- Oracle的表被锁后的恢复
运行下列SQL,找出数据库的serial#,执行结果如下图所示 SELECT T2.USERNAME, T2.SID, T2.SERIAL#, T2.LOGON_TIME FROM V$LOCKE ...
- oracle多表关联删除数据表记录方法
oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...
- Oracle误删除表数据后的恢复具体解释
Oracle误删除表数据后的恢复具体解释 測试环境: SYSTEM:IBM AIX 5L Oracle Version:10gR2 1. undo_re ...
随机推荐
- Azure应用服务+Github实现持续部署
上次我们介绍了如何使用Azure应用服务(不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序).我们通过Visual studio新建一个项目后手动编译发布代码.然后通过F ...
- centos 7.5搭建oracle DG
一.背景 1.IP分配 主库:192.168.12.5 node1 备库:192.168.12.6 node2 2.环境 主库已安装数据库软件,已建库,并有业务数据 备库已安装数据库软件,未建库 二. ...
- java-01-基础语法
1. 注释 单行注释 格式: // 注释信息 多行注释 格式: /* 注释信息 */ 文档注释 格式: /** 注释信息 */ 2. 常量 定义:在程序运行过程中,其值不可发生改变的量 分类: 常量类 ...
- react第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制)
第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制) 课程目标 深入理解和掌握事件的冒泡及捕获机制 理解react中的合成事件的本质 在react组件中合理的使用原生事件 ...
- 关于MySQL索引知识与小妙招 — get get get
一.索引基本知识 1.1 索引的优点 大大减少了服务器需要扫描的数据量,加快数据库的检索速度 帮助服务器避免排序和临时表 将随机io变成顺序io 1.2 索引的用处 速查找匹配WHERE子句的行 从c ...
- 七轮面试最终拿下阿里offer —— 十年经验之谈
前言 今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个"五年计划"截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了.但 ...
- Web服务器-正则表达式-整理+复习(3.1.1)
@ 目录 1.常用api 2.例子 3.正则表达式模式 关于作者 参考文章 1.常用api re.match(pattern, string, flags=0) pattern 匹配的正则表达式 st ...
- Java 持久层框架之 MyBatis
MyBatis 简介 MyBatis 是一个基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需关注 SQL 语句本身,而不用再花费精力去处理诸如注册驱动.创建 Connection.配 ...
- Core3.0使用Swagger接口文档
前言 此方法为百度搜索结果,原文链接找不到了 步骤 1.引用Nuget Swashbuckle.AspNetCore 2.Startup.cs配置 //注册swagger服务,定义1个或者多个swag ...
- 感知机:Perceptron Learning Algorithm
感知机是支持向量机SVM和神经网络的基础 f = sign(wx+b) 这样看起来好像是LR是差不多的,LR是用的sigmoid函数,PLA是用的sign符号函数,两者都是线性分类器,主要的差别在于策 ...