很多时候人为误操作会对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 hh24: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
利用延时备库找回被误删的数据
来源:这里教程网
时间:2026-03-03 12:30:44
作者:
编辑推荐:
- 利用延时备库找回被误删的数据03-03
- [20181203]drop table后如何获得表结构.txt03-03
- 在word中画圆的方法步骤详解03-03
- word怎样添加或删除水印03-03
- 这么用X86,小心ORACLE+RAC中招--技术人生系列第四十一期-我和数据中心的故事03-03
- 在word中设置首字下沉的方法步骤图03-03
- word怎样制作电子版公章03-03
- 怎样将已存在数据插入表格中03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 这么用X86,小心ORACLE+RAC中招--技术人生系列第四十一期-我和数据中心的故事
- 这个锅,我们运维,不背! 开发和运维都该看看--技术人生系列第四十三期
这个锅,我们运维,不背! 开发和运维都该看看--技术人生系列第四十三期
26-03-03 - Debian服务负载均衡配置(手把手教你搭建高可用Linux服务集群)
Debian服务负载均衡配置(手把手教你搭建高可用Linux服务集群)
26-03-03 - 从“山穷水尽”到“柳暗花明”--技术人生系列第四十四期我和数据中心的故事
从“山穷水尽”到“柳暗花明”--技术人生系列第四十四期我和数据中心的故事
26-03-03 - 在word中如何给文字添加底纹
在word中如何给文字添加底纹
26-03-03 - 修改参数一定要确保重启后仍然生效!!--技术人生系列第四十二期-我和数据中心的故事
- 动态增加CPU带来的数据库重启风险--技术人生系列第四十六期-我和数据中心的故事
- 看应用设计的重要性--技术人生系列第四十七期-我和数据中心的故事
看应用设计的重要性--技术人生系列第四十七期-我和数据中心的故事
26-03-03 - 生产比测试慢?--技术人生系列第五十期-我和数据中心的故事
生产比测试慢?--技术人生系列第五十期-我和数据中心的故事
26-03-03 - 如何在word中添加封面
如何在word中添加封面
26-03-03
