oracle数据库表恢复到特定时间点
某一张表被应用软件里误操作把数据都清空了,现在想恢复到清空之间,比如2013年8月13日14点以前,应该怎样操作?
通过这个问题可以引发一系列的知识点串联。
1、如果开启闪回可以使用闪回表。
怎样查看我的数据库有没有开启flashback
flashback database要求数据库必须处于归档模式,且闪回之后必须使用resetlogs打开数据库
查看数据库的归档模式及闪回是否启用
SQL> select log_mode,open_mode,flashback_on from v$database;
LOG_MODE OPEN_MODE FLASHBACK_ON
------------------- ----------------- ------------------------
ARCHIVELOG READ WRITE NO
FLASHBACK_ON为NO,则表示闪回特性尚未启用
oracle数据库归档模式
Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。
模式介绍
如何查看oracle当前处于归档模式还是非归档模式
1、
selectname,log_mode,open_mode from v$database;
NAME LOG_MODE OPEN_MODE
--------- ------------ -----------------
CKDB ARCHIVELOG READ WRITE
若是归档模式,则LOG_MODE=ARCHIVELOG
若是非归档模式,则LOG_MODE=NOARCHIVELOG
2、
输入:archive log list 回车,可以查看是否是归档模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 31
Current log sequence 33
oracle数据库如何打开归档
oracle数据库如果不开启归档模式,对于误操作来说将是灾难性的,无法进行恢复操作。下面介绍oracle如何核实是否开启归档模式和如何开启归档模式的方法。
- 开启归档模式
1>首先打开cmd命令窗口输入:sqlplus / as sysdba登录数据库
2>成功登录数据库后,输入命令:select log_mode from v$database用来查看归档模式
3>查询后可以看到log_ mode是noarchivelog说明归档模式是不归档模式
4>用shutdown immediate或shutdown normal关闭数据库
5>等待数据库正常关闭
6>数据库关闭后,用startup mount启动数据库、加载实例但数据库关闭
7>使用命令:alter database archivelog;打开归档日志,执行命令成功后返回数据库已更改的消息
8>使用命令:alter database open;打开数据库即可完成整体操作
9>alter system archive log start; (启用自动归档)
10>exit (退出)
11>验证归档日志。重复第一步骤,执行命令:select log_mode v$database,看到执行结果为archivelog
做一次完全备份,因为非归档日志模式下产生的备份日志对于归档模式已经不可用了.这一步非非常重要!
2.改变归档模式到非归档模式:
查看oracle是否开启闪回,查看删除记录
查看oracle是否开启闪回功能,
--FLASHBACK_ON为NO,则表示闪回特性尚未启用
select log_mode,open_mode,flashback_on from v$database;
查看oracle删除记录
select * from user_recyclebin;


经过上述一段艰难的过程,下面来操作闪回:
(一)
如果开启闪回可以使用闪回表。
select log_mode,flashback_on from v$database;
如果是下面结果则开了闪回
LOG_MODE FLASHBACK_ON
------------ ------------------
ARCHIVELOG YES
可以执行以下命令
alter table 表名 enable row movement; --开启表行移动
flashback table 表名 to timestamp to_timestamp('20130813 14:00:00','yyyymmdd hh24:mi:ss');
--闪回到2013年8月13日14点
你要是没开启,有逻辑备份可以使用imp命令导入数据。
如果没用逻辑备份,开启归档模式,有物理备份,能够停机、数据丢失的话,可以采用不完全恢复
用rman登陆
rman target /
执行以下命令
run{shutdown immediate;
startup mount;
set until time = "to_date('20130813 14:00:00','yyyymmdd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;}
切记!做以上任何操作前做好备份,否则出了问题后悔莫及。
而且建议你联系你们数据库管理员处理这个问题。
(二)
如果只是1个表的话, 还是比较简单的。
下面是一个例子:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
SQL> CREATE TABLE test_fb_table ( 2 ID int, 3 VAL VARCHAR2(10) 4 );Table created.SQL> INSERT INTO test_fb_table VALUES (1, 'TEST');1 row created.SQL> commit;Commit complete.假如 数据被错误的删除/更新需要检索某个时间点上,表原有的数据。SQL> SELECT TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss') FROM dual;TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'--------------------------------------2010-11-07 13:01:37这里删除掉数据。SQL> delete from test_fb_table;1 row deleted.SQL> commit;Commit complete.确认数据已经被删除。SQL> select * from test_fb_table;no rows selected |
|
1
2
3
4
5
6
7
|
这里检索出,指定时间点上,指定表的数据情况。SQL> select * from test_fb_table 2 AS OF TIMESTAMP TO_TIMESTAMP('2010-11-07 13:01:37', 3 'yyyy-mm-dd hh24:mi:ss'); ID VAL---------- -------------------- 1 TEST |
对于你来说, 也就是你需要先
CREATE TABLE 临时表 AS
select * from 你的那个数据被删除的表
AS OF TIMESTAMP TO_TIMESTAMP('2013-08-13 14:00:00', 'yyyy-mm-dd hh24:mi:ss');
这样, 就把当初那个时间点上的, 那个表的数据, 复制到一个 临时表 里面去了。
然后再
INSERT INTO 你的那个数据被删除的表 SELECT * FROM 临时表;
注: 你需要确定一下, 那个 数据被删除的表 上面, 有没有触发器什么的。
有的话, 可能需要暂时 禁用掉, 数据插入完了再恢复。
(三)(没有dba权限)
如果有数据库备份和日志备份,才能解决你的问题,将数据恢复到某个时间点。
否则无法实现。
如果有备份,可以让DBA帮忙恢复一个新数据库,然后你将此表的数据copy出来到原先的数据库中。
(四)(没有dba权限)
需要用闪回表flashback table,你是做不了的,找dba吧
oracle数据库表恢复到特定时间点的更多相关文章
- Oracle 数据库表同步方法浅议
总结一下Oracle数据库表级别的复制同步 一.通过触发器进行表的复制 原理,是监听表上都某一字段进行的DML操作,然后得到DML操作的数据,重新在另一个表上执行DML操作. 优点: 简单,编写一个触 ...
- Oracle数据库表分区
一.Oracle数据库表分区概念和理解 1.1.已经存在的表没有方法可以直接转化为分区表. 1.2.不在分区字段上建立分区索引,在别的字段上建立索引相当于全局索引.效率 ...
- oracle数据库表空间追加数据库文件方法
oracle数据库表空间追加数据库文件方法 针对非大文件方式表空间,允许追加文件进行表空间的扩展,单个文件最大大小是32G 第一种方式:表空间增加数据文件 www.2cto.com 1 ...
- Java创建Oracle数据库表
我们通常只用java执行DML(即:insert, update, delete, select)操作,很少用来执行DDL(create, drop, alert)操作.今天试了下如何用java来创建 ...
- oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?
Oracle 语句中“||”代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335s ...
- 在oracle数据库表中没有添加rowid字段为什么会出现?
rowid 是 oracle 数据库表中的伪列, rowid 首先是一种数据类型,它唯一标识一条记录物理位置, 基于64位编码的18个字符显示.因为 rowid 是伪列, 所以并未真的存储在表中,但可 ...
- Oracle数据库表空间与数据文件的关系描述正确的是( )
Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...
- Oracle数据库表空间与用户的关系是 ( )
Oracle数据库表空间与用户的关系是 ( )? A.一对一 B.一对多 C.多对一 D.多对多 解答: D 一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用.
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
查看Oracle数据库表空间大小(空闲.已使用),是否要增加表空间的数据文件 1.查看表空间已经使用的百分比 Sql代码 select a.tablespace_name,a.bytes/1024/1 ...
随机推荐
- 交换机配置——VTP管理交换机的VLAN配置
一.实验目的:将S1配置成VTP-Server,S2配置成VTP-Transparent,S3配置成VTP-Client,S4配置成VTP-Client 二.拓扑图如下 三.具体步骤: (1)S1交换 ...
- UBUNTU 15.10 CAFFE安装教程(测试可用)
转帖:https://github.com/BVLC/caffe/wiki/Ubuntu-15.10-Installation-Guide Ubuntu 15.10 have been release ...
- 了解dubbo+zookeeper
一.Dubbo是什么? Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,分布式服务框架(SOA),致力于提供高性能和透明化的RPC远程 ...
- 教材代码完成情况测试P402(ch13课上测试)
一.任务要求 0 在Ubuntu中用自己的有位学号建一个文件,教材p402代码 1 修改代码,至少增加一个问题和答案 2 随机选多个问题中的一个进行提问,服务器要正确回答问题 3 提交运行结果截图,要 ...
- 邻居子系统 之 邻居项创建__neigh_create
概述 IP层输出数据包会根据路由的下一跳查询邻居项,如果不存在则会调用__neigh_create创建邻居项,然后调用邻居项的output函数进行输出: __neigh_create完成邻居项的创建, ...
- 简单的多屏播放器示例(vlc+qt)
介绍 简单的多屏播放器 最多同时播放16个视频 支持本地文件和rtsp.rtmp等流媒体播放 VS2015工程,依赖Qt+VLC 练手作品 截图 下载 程序:download.csdn.net/d ...
- Nexus3.x帐号权限配置
一.使用admin登录后,点击上方齿轮图标 二.打开左侧导航,Security Privileges:具体的权限明细,比如我创建一个test仓库,这里就会生成 Roles:添加角色,设置每个角色可看到 ...
- SQLServer-设置-Table:阻止保存要求重新创建表的更改
ylbtech-SQLServer-设置-Table:阻止保存要求重新创建表的更改 1.返回顶部 ·不允许保存更改,阻止保存要求重新创建表的更改 · 2.返回顶部 · https://jingyan. ...
- spring整合mybatis(代理的方式)【我】
创建项目等同上一篇非代理方式随笔,只说不一样的部分: 项目结构主要是多了下面红框部分: 配置文件: 主要是dao配置文件中多了Mapper代理java类的扫描包路径: applicationConte ...
- pagehelper用法
spring boot 和 mybatis 中使用 pagehelper: 1. 在pom.xml 中加入pagehelper的引用: <dependency> <groupId&g ...