用闪回恢复delete,insert,update表(学习手记1)

1.修改库的归档模式

startup mount -> alter database archivelog  ->alter system switch logfile(手动归档切换)生成归档文件


2.

select name,first_change# fscn,next_change# nscn,first_time from v$archived_log

1    +DG1/devdb/1_41_789857151.dbf    1241938    1253322    2012-8-9 上午 05:23:19
2    +DG1/devdb/1_42_789857151.dbf    1253322    1253503    2012-8-10 上午 05:58:03
3    +DG1/devdb/1_43_789857151.dbf    1253503    1253521    2012-8-10 上午 05:59:49
4    +DG1/devdb/2_22_789857151.dbf    1197906    1253519    2012-8-3 上午 04:52:10
5    +DG1/devdb/2_23_789857151.dbf    1253519    1253856    2012-8-10 上午 05:59:52


3.create table aa as select * from dba_objects;

SQL> delete from aa where rownum<1200;

1199 rows deleted.

SQL> commit;

Commit complete.

SQL> delete from aa where rownum<5000;

4999 rows deleted.


4.发现表的数据不对了,误delete;

先获取当前SCN,作参考

SQL> select dbms_flashback.get_system_change_number fscn from dual;

      FSCN
----------
   1256223

5.然后根据归档的时间和FSCN号码进行反复尝试,达到一个认为满意的值时为止;

  1* select count(*) from aa as of scn &scn
SQL> /
Enter value for scn: 1253521
old   1: select count(*) from aa as of scn &scn
new   1: select count(*) from aa as of scn 1253521

  COUNT(*)
----------
     50658

SQL> /
Enter value for scn: 1253519
old   1: select count(*) from aa as of scn &scn
new   1: select count(*) from aa as of scn 1253519

  COUNT(*)
----------
     50658

SQL> /
Enter value for scn: 1253503
old   1: select count(*) from aa as of scn &scn
new   1: select count(*) from aa as of scn 1253503

  COUNT(*)
----------
     50658

6. 再创建一张临时存数据的表

crate table aa2 as select * from aa where 1=2;

然后将确定的SCN值插回aa2表做两表的对比,

将少的数据插回表中即可;


二.当中间出现过DDL操作对此表(eg.truncate),那么再用闪回时将报

              *
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed


三。此操作对于insert,update同样生效,操作类似;

四。闪回本质是利用UNDO表空间内容;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对于数据库中的 `insert`、`update`、`delete` 语句的使用,我分别举例说明如下: 1. `INSERT` 语句 `INSERT` 语句用于向中插入一条新记录。语法如下: ```sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 其中,`table_name` 是名,`column1, column2, column3, ...` 是需要插入数据的列名,`value1, value2, value3, ...` 是需要插入的值。 例如,向 `Student` 中插入一条新记录,可以使用如下的 SQL 语句: ```sql INSERT INTO Student (SId, Sname, Ssex, Dno) VALUES ('20210001', '张三', '男', '01'); ``` 2. `UPDATE` 语句 `UPDATE` 语句用于更新中的记录。语法如下: ```sql UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ``` 其中,`table_name` 是名,`column1, column2, ...` 是需要更新的列名,`value1, value2, ...` 是需要更新的值,`condition` 是更新条件。 例如,更新 `Student` 中学号为 `20210001` 的记录的性别为女,可以使用如下的 SQL 语句: ```sql UPDATE Student SET Ssex = '女' WHERE SId = '20210001'; ``` 3. `DELETE` 语句 `DELETE` 语句用于删除中的记录。语法如下: ```sql DELETE FROM table_name WHERE condition; ``` 其中,`table_name` 是名,`condition` 是删除条件。 例如,删除 `Student` 中学号为 `20210001` 的记录,可以使用如下的 SQL 语句: ```sql DELETE FROM Student WHERE SId = '20210001'; ``` 需要注意的是,在使用 `DELETE` 语句时,要特别小心,避免误删重要数据。推荐在使用 `DELETE` 语句前先备份数据,以防不测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值