【Oracle-备份恢复】Oracle11g数据库恢复自救指南

先写个大纲。

近日由于同事误操作,在开发过程中,误删表的字段,导致库中该表的该字段数据全部丢失。经过网络一番搜索,然后看书求证,对Oracle的备份和恢复机制有了一定的了解。本文重在解决如何恢复数据。

1. DML操作导致数据丢失

DML (Data Manipulation Language)数据操纵语言 statements are used for managing data within schema objects。

在SQL中,一般是 SELECT 、INSERT 、UPDATE 、DELETE 、MERGE 、CALL 、EXPLAIN PLAN 、LOCK TABLE。

需要Commit。

DML操作导致的数据丢失,较容易恢复,Oracle本身提供的机制也很多。如闪回技术,简单好用。

但是闪回特性,需要在数据丢失就要打开该特性。该特性从Oracle 10g 才有,11g也有。所以赶紧百度如何打开Oracle的闪回功能。

2.DDL操作导致数据丢失

DDL( Data Definition Language )数据库定义语言 statements are used to define the database structure or schema。

在SQL中一般是如下动词:CREATE 、ALTER 、DROP 、TRUNCATE 、COMMENT 、RENAME。

不需要Commit。

DDL操作导致的数据丢失,比较难恢复。无法使用闪回。比如,误删表字段时,使用闪回,Oracle会提示:表结构已经发生更改。

只能使用 日志(重做日志 redo log)挖掘。但是 重做日志也是需要在数据丢失前把 重做日志归档功能打开,否则,重做日志可能会被新的重做日志覆盖,无法挖掘数据。所以赶紧看下文如何 打开重做日志归档!!!

不过如果距离数据丢失不久,且丢失数据后,没有大量写操作,利用当前的 重做日志组,还是有可能恢复数据的。

具体有时间再写。

3.定时备份 不再后悔

Oralce有很多备份机制。

自动备份:使用Oracle的RMAN工具。

手工备份:逻辑备份,物理备份。冷备份,热备份。

逻辑备份: 可使用 Oracle自带的 EXP/IMP 工具,或11g之后的 EXPDP/IMPDP 数据泵工具。可选择导出整个数据库、用户对象、表等不同等级内容。其中,数据泵工具只能在数据库服务器上操作,而EXP/IMP可在客户机/客户端备份远程数据库服务器的数据。

物理备份:定时复制数据文件dbf、重做日志文件log、控制文件。

冷备份:关闭数据库进行物理备份,可保证数据一致性。

热备份:不关闭数据,进行物理备份。

(下面是2019年5月13日更新)

4.归档日志

实际操作来看,归档日志每天都会产生,很容易将硬盘占用完。一旦占完,Oracle就会罢工,后果很严重。所以我又写了脚本定时删除归档日志,但是删除了归档日志就无法完全恢复了。因为我不可能关闭Oracle去冷备数据文件,所以陷入了死循环。

所以,最终我放弃了要时刻能“完全恢复”的想法。我关闭了日志归档,关闭了闪回特性。而是利用 EXPDP/IMPDP工具,写了个每隔6小时定时导出指定用户对象数据的脚本,这个脚本还可定时删除超过3天的导出文件。

对于我们的项目6小时前的备份数据是足够了。当然你可以改成2个小时,因为 EXPDP 命令的执行非常的快,并且 EXPDP 命令只能在 Oracle数据库服务器上执行。

4. 归档日志的极其重要性!

不想跑路,最好赶紧马上立即打开Oralce的重做日志归档。其实,最好是在创建数据库的第一时间,就开启日志归档模式。若你现在还没开,赶紧看下文,打开归档模式吧!

它的重要性不言而喻,很多高级备份/恢复功能全都仰赖它。重做日志归档的重要性可简单理解为:

重做日志归档 = 数据库完全恢复

数据文件都可以丢失,只要日志归档从一开始就打开并且完整保存,可以从日志归档中直接从0重建一个一模一样的数据文件,这很厉害了。

简单说,重做日志是将所有的操作记录完整的记录了到日志里,而日志文件基本只有3组,循环覆盖记录。时间久了,旧的重做日志就会被覆盖。一旦打开重做日志归档,当重做日志写满时,会自动归档,也就是说,日志归档可以将从建库一来的所有全部操作都一一的记录下来,以备后来恢复。多么可靠的设计。其实还有其它很多的冗余设计,可能这些设计才是一个数据库管理软件的精髓,Oracle与Access的区别所在。

《Oracle数据库管理之道》第19.9小节  P511

必须要小心保存或者备份【归档日志】,因为一旦它丢失或损坏就无法实现数据库完全恢复,只能实现不完全恢复

如何打开Oracle数据库的日志归档?很不幸,这需要关闭数据库进行操作。

1. 先关闭数据库 

shutdown immediate;

2. 启动数据库到 Mount 状态 

startup 

3. 开始归档模式

alter database archivelog

4. 验证是否开启归档模式

archive log list;

最后,如果你需要维护Oracle数据库,备份与恢复操作的知识要了解。平时的备份一定要做好,否则一旦出了数据问题,就后悔莫及。

参考书籍:《Oracle数据库管理之道》,林树泽,历铁帅,何会军编著,清华大学出版社。

发布了58 篇原创文章 · 获赞 44 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qilei2010/article/details/88759929