- 浏览: 74143 次
- 性别:
- 来自: 广州
最新评论
开始truncate该表
SQL> truncate table test;
Table truncated
查询当前时间为20090314 12:21:29
引用
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYYMMDDHH24:
------------------------------------------------------
2010-12-22 15:33:09
TO_CHAR(SYSDATE,'YYYYMMDDHH24:
------------------------------------------------------
2010-12-22 15:33:09
怎么办,表被truncate了,当然是想法子恢复回来了,首先将数据库置于MOUNT模式
引用
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> flashback database to timestamp to_timestamp('2010-12-22 15:32:20' ,'yyyy-mm-dd hh24:mi:ss');
flashback database to timestamp to_timestamp('2010-12-22 15:32:20' ,'yyyy-mm-dd hh24:mi:ss')
*
第 1 行出现错误:
ORA-01034: ORACLE not available
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
数据库装载完毕。
SQL> flashback database to timestamp to_timestamp('2010-12-22 15:32:20' ,'yyyy-mm-dd hh24:mi:ss');
闪回完成。
quote]
提示成功了,将数据库打开,请注意这个restlogs!
现在让登陆进去看看结果
该表记录终于找回来了,非常激动人心吧!
除了上面说的格式问题外,还要另外注意一点,就是这个闪回的时间是有限的,要有足够的闪回空间,否则将无法将数据库闪回到时间太前的时间,比如该例子说明到早上10点就无法闪回了。
SQL> flashback database to timestamp to_timestamp('2009-03-14 10:00:00','yyyy-mm-dd hh24:mi:ss');
ERROR at line 1:
ORA-38729: Not enough flashback database log data to do FLASHBACK.
总结:本小节通过闪回了整个数据库找回了被truncate的数据,不过现实中这样闪回整个数据库的操作可能只适合在开发库和测试库,生产中做这样操作的可能性非常小,首先是闪回整个庞大的数据库要足够的空间,其次是你如果闪回了你当前失误点时刻的数据库,好象时光倒流了,但是你是并发用户数据库,别人的正常操作过程也被你给回退了。所以生产中即便要做这样的操作,也要有非常严谨的考虑和规划才开始操作。
联想与引申:本例是讲述了如何找回被truncate的表,大家想想,虽然我把delete+commit,drop表,truncate table三个最容易发生的误操作分别用闪回查询,回收站和闪回数据库三种不同的方法找回,实际上闪回数据库的方法是包含了恢复delete+commit 和drop两类,整个数据库都可以回到某个时刻,被delete+commit和drop的表能不恢复回来吗!此外被drop的表如果回收站被人清空了,估计也就不得不依赖闪回数据库了。不过闪回数据库和回收站必须依赖oracle 10g版本数据库才可以,这点要牢记!
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> flashback database to timestamp to_timestamp('2010-12-22 15:32:20' ,'yyyy-mm-dd hh24:mi:ss');
flashback database to timestamp to_timestamp('2010-12-22 15:32:20' ,'yyyy-mm-dd hh24:mi:ss')
*
第 1 行出现错误:
ORA-01034: ORACLE not available
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
数据库装载完毕。
SQL> flashback database to timestamp to_timestamp('2010-12-22 15:32:20' ,'yyyy-mm-dd hh24:mi:ss');
闪回完成。
quote]
提示成功了,将数据库打开,请注意这个restlogs!
引用
SQL> alter database open resetlogs;
数据库已更改。
数据库已更改。
现在让登陆进去看看结果
引用
SQL> connect scott/liweiwei@liweiwei
已连接。
已连接。
该表记录终于找回来了,非常激动人心吧!
引用
SQL> select count(*) from test;
COUNT(*)
----------
14
COUNT(*)
----------
14
除了上面说的格式问题外,还要另外注意一点,就是这个闪回的时间是有限的,要有足够的闪回空间,否则将无法将数据库闪回到时间太前的时间,比如该例子说明到早上10点就无法闪回了。
SQL> flashback database to timestamp to_timestamp('2009-03-14 10:00:00','yyyy-mm-dd hh24:mi:ss');
ERROR at line 1:
ORA-38729: Not enough flashback database log data to do FLASHBACK.
总结:本小节通过闪回了整个数据库找回了被truncate的数据,不过现实中这样闪回整个数据库的操作可能只适合在开发库和测试库,生产中做这样操作的可能性非常小,首先是闪回整个庞大的数据库要足够的空间,其次是你如果闪回了你当前失误点时刻的数据库,好象时光倒流了,但是你是并发用户数据库,别人的正常操作过程也被你给回退了。所以生产中即便要做这样的操作,也要有非常严谨的考虑和规划才开始操作。
联想与引申:本例是讲述了如何找回被truncate的表,大家想想,虽然我把delete+commit,drop表,truncate table三个最容易发生的误操作分别用闪回查询,回收站和闪回数据库三种不同的方法找回,实际上闪回数据库的方法是包含了恢复delete+commit 和drop两类,整个数据库都可以回到某个时刻,被delete+commit和drop的表能不恢复回来吗!此外被drop的表如果回收站被人清空了,估计也就不得不依赖闪回数据库了。不过闪回数据库和回收站必须依赖oracle 10g版本数据库才可以,这点要牢记!
相关推荐
注意这边文章针对的是PRM在 数据字典模式下的Truncate恢复选项不可用时使用,数据字典模式下的Truncate恢复选项是最简单、易用的一种模式,具体使用见《使用PRM恢复Oracle数据库中误truncate截断的表数据》...
因自己前段时间因truncate一张表无法找回,且数据超过60W,平常的企业软件超过1W收费,故整理此内容,希望和我遇到同样问题的新手有帮助
1、 表是否能成功恢复,取决于被truncate了的表所占用的数据块是不是被新的段(表、索引等)所重用,如果被重用就无法完成这样的恢复了,看个人运气了 。 2、需用到牛人写的恢复包,FY_Recover_Data。
truncate误操作恢复方法集合truncate误操作恢复方法集合truncate误操作恢复方法集合
Truncate 不会逐个清除用户数据块上的数据,而仅仅重置数据字典和元数据块上的...也就是说,此时,基本数据表并未破坏,而是被系统回收,等待被重新分配—因此,要恢复被truncate的数据,需要及时备份所在的数据文件。
NULL 博文链接:https://steve-111.iteye.com/blog/750326
truncate表恢复,包含了相应的操作步骤以及脚本。遇到紧急情况,很实用哦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
实现在oracle使用truncate吴删数据的恢复
实际线上的场景比较复杂,当时涉及了truncate, delete 两个操作,经确认丢数据差不多7万多行,等停下来时,差不多又有共计1万多行数据写入。 这里为了简单说明,只拿弄一个简单的业务场景举例。 测试环境: Percona-...
gdul 工具恢复被truncate 表 示例
truncate,delete以及drop区别汇总,需要可以自己下载看看,个人觉得蛮好的!
Oracle中Truncate表的恢复方法.pdf
使用bbed强制online数据文件,修复system头损坏,找回truncate数据
此类是不完全恢复类型,基于时间点恢复,恢复后,应该再次进行一次全备.
PostgreSQL TRUNCATE TABLE PostgreSQL 中 TRUNCATE TABLE 用于删除表的数据,但不删除表结构。 也可以用 DROP TABLE 删除表,但是这个命令会连表的结构一起删除,如果想插入数据,需要重新建立这张表。 TRUNCATE ...
本文介绍在事务中回滚TRUNCATE操作的方法,并演示了操作的结果,是可以对TRUNCATE进行回滚操作的。
是一次数据恢复中,我们老大在Sql中敲的,我这里最想记录的是他优良的代码风格.