文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

利用延时备库找回被误删的数据

2024-04-02 19:55

关注

很多时候人为误操作会对Oracle的数据造成影响,比如误删数据。当误操作发生时,通常有四个解决方法:

  1.闪回数据库或闪回表

 2.备份恢复

 3.logminer挖掘redo

 4.使用延时库

前三种方法都不是很完美:

  闪回数据库影响较大,且事先需要开启库上的闪回。

 闪回表或闪回版本查询使用方便,但在繁忙的数据库中很容易快照过旧。

 备份恢复耗时长、影响大

 logminer挖掘日志耗时耗力


此时如果事先有搭建延时备库的话,则可以很容易的从备库得到误删的数据。以下进行演示。


主库:

SQL> show parameter instance_name


NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      BDDEV2

备库:

SQL> show parameter instance_name


NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      BDTEST


现有表及数据如下:

SQL> select * from scott.tb_test;

        ID        AGE TM

---------- ---------- -----------------

         1          2 20181203 14:22:14

         2          3 20181203 14:22:14

         3          4 20181203 14:22:14

         4          5 20181203 14:22:14

         5          6 20181203 14:22:14

         6          7 20181203 14:22:14

         7          8 20181203 14:22:14

         8          9 20181203 14:22:14

         9         10 20181203 14:22:14

        10         11 20181203 14:22:14

10 rows selected.


此时备库是实时应用的:

SQL> SELECT * FROM V$DATAGUARD_STATS;

NAME                           VALUE                          UNIT                                     TIME_COMPUTED                  DATUM_TIME

------------------------------ ------------------------------ ---------------------------------------- ------------------------------ ------------------------------

transport lag                  +00 00:00:00                   day(2) to second(0) interval             12/03/2018 14:23:33            12/03/2018 14:23:33

apply lag                      +00 00:00:00                   day(2) to second(0) interval             12/03/2018 14:23:33            12/03/2018 14:23:33

apply finish time              +00 00:00:00.000               day(2) to second(3) interval             12/03/2018 14:23:33

estimated startup time         7                              second                                   12/03/2018 14:23:33


备库转为延时库,延时60分钟:

SQL> alter database recover managed standby database cancel;

Database altered.


SQL> alter database recover managed standby database disconnect from session delay 60;

Database altered.


主库修改记录:

SQL> update scott.tb_test set age = 100,tm = sysdate where id = 10;

1 row updated.


SQL> commit;

Commit complete.


SQL>  select * from scott.tb_test;

        ID        AGE TM

---------- ---------- -----------------

         1          2 20181203 14:22:14

         2          3 20181203 14:22:14

         3          4 20181203 14:22:14

         4          5 20181203 14:22:14

         5          6 20181203 14:22:14

         6          7 20181203 14:22:14

         7          8 20181203 14:22:14

         8          9 20181203 14:22:14

         9         10 20181203 14:22:14

        10        100 20181203 14:26:50

10 rows selected.

可看到,修改数据的时间为' 20181203 14:26:50 '。


此时删除表数据:

SQL> select sysdate from dual;

SYSDATE

-----------------

20181203 14:28:18


SQL> truncate table scott.tb_test;

Table truncated.


SQL> alter system switch logfile;

System altered.


此时主库中数据已经删除,备库中数据还停留在主库修改数据之前:

SQL> select * from scott.tb_test;

        ID        AGE TM

---------- ---------- -----------------

         1          2 20181203 14:22:14

         2          3 20181203 14:22:14

         3          4 20181203 14:22:14

         4          5 20181203 14:22:14

         5          6 20181203 14:22:14

         6          7 20181203 14:22:14

         7          8 20181203 14:22:14

         8          9 20181203 14:22:14

         9         10 20181203 14:22:14

        10         11 20181203 14:22:14


如果我们要恢复数据到update之后、truncate之前,则要手动前滚备库到指定时间点:

--备库操作

重启备库到mount:

SQL> startup force mount;

ORACLE instance started.


Total System Global Area 2.1379E+10 bytes

Fixed Size                  2262656 bytes

Variable Size            2.0401E+10 bytes

Database Buffers          939524096 bytes

Redo Buffers               36073472 bytes

Database mounted.


手动前滚备库到指定时间点:

SQL> recover standby database until time '20181203 14:27:00';

ORA-00279: change 108456269 generated at 12/03/2018 14:26:50 needed for thread 1

ORA-00289: suggestion : /opt/app/oracle/archivelog_bdtest/1_248_987097214.dbf

ORA-00280: change 108456269 for thread 1 is in sequence #248


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

auto

Log applied.

Media recovery complete.


前滚完成,打开备库:

SQL> alter database open;

Database altered.


SQL> alter session set nls_date_format='yyyymmdd hh34:mi:ss';

Session altered.


SQL> select * from scott.tb_test;

        ID        AGE TM

---------- ---------- -----------------

         1          2 20181203 14:22:14

         2          3 20181203 14:22:14

         3          4 20181203 14:22:14

         4          5 20181203 14:22:14

         5          6 20181203 14:22:14

         6          7 20181203 14:22:14

         7          8 20181203 14:22:14

         8          9 20181203 14:22:14

         9         10 20181203 14:22:14

        10        100 20181203 14:26:50

10 rows selected.


此时就得到了所需数据,只需把数据重新导入到主库中即可。


待处理完成后,重新打开备库的redo应用:

SQL> alter database recover managed standby database disconnect from session delay 60;

Database altered.

此时备库又变为了正常的延时库。


注意:

 1.备库DELAY时间指的是当主库日志归档后,再延时DELAY指定的时间应用日志,比如:设置DELAY参数为20分钟,10:00主库日志归档,则10:20备库才会应用此归档日志

 2.也可以在LOG_ARCHIVE_DEST_2指定DELAY参数达到同样的延时目的:

 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DEVSTBY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DEVSTBY DELAY=60'

 3.备库不能进行实时应用,因为实时应用会使DELAY参数失效,备库变为ADG


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯