OCM实训:Oracle 10g 数据恢复综合练习 « Rednat Linux网络日志平台_linux集群_gfs文件系统_iscsi存储配置_ldap服务加密_rac负载均衡_data guard异地备份_ogg流复制技术_rman备份恢复 
首页 » 数据库 » OCM实训:Oracle 10g 数据恢复综合练习

OCM实训:Oracle 10g 数据恢复综合练习

时间:2012-03-28作者:felix.chan分类:数据库评论:17

Oracle 10g 数据恢复综合练习

 

环境说明:

$ORACLE_BASE=/u01/oracle/oradata

$ORACLE_HOME=/u01/oracle/product/10.2.0/db_1

$ORACLE_SID=felix

 

 

一、             密码文件丢失

恢复步骤:

1、进入到$ORACLE_HOME/dbs目录,然后用命令重新创建新的密码文件即可

[oracle@OracleServer network]$ cd $ORACLE_HOME/dbs

[oracle@OracleServer dbs]$ orapwd file=orapwfelix password=oracle entries=5

 

 

 

二、             参数文件丢失

 

故障状态:

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup ;

ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file ‘/u01/oracle/product/10.2.0/db_1/dbs/initfelix.ora’

 

 

在启动日志中可以查看到相关参数信息,恢复步骤:

抱歉,只有对本文发表过评论才能阅读隐藏内容。

三、             控制文件丢失

 

如果控制文件时多路复用的,只是丢失了其中一个,还有存在的控制文件,可以直接复制还原回去就可以了。

 

控制文件恢复的前提条件:其他的数据文件都是全部可用的,否则可能导致数据丢失或无法恢复数据库。

 

如果控制文件全部丢失,但是以前做过数据库的完整备份,可以使用备份+归档日志+联机日志进行恢复。

 

如果控制文件全部丢失,而且数据库备份也不可用,只能做数据不完全恢复。

恢复步骤:

1、  收集系统运营信息:联机日志文件、数据文件、数据库字符集

2、  手工建立创建控制文件的脚本

3、  执行后,在做recover

4、  数据库起来之后要重新做完整备份。

 

在什么时候最好做控制文件的重新备份?

1、  表空间发生更改

2、  数据文件发生物理性变化

3、  联机日志文件发生物理性变化时

 

 

 

 

四、             数据文件丢失

 

全部数据文件丢失:

通过rman进行全库恢复

Restore database;

Recover database;

 

某一个或某几个数据文件丢失,但不是系统表空间和undo表空间:

先将丢失数据文件的相关表空间设置为离线,将数据库开起来。

通过rman对丢失的数据文件进行恢复

Alter database datafile offline;

Restore datafile 4,5;

Recover datafile 4,5;

Alter database datafile online;

 

临时表空间的损坏,或要减小临时表空间数据文件的大小:

添加一个新的临时表空间文件

Alter database temp add tempfile ‘/u01/temp11.dbf’ size 100M;

删除原来的临时表空间文件

Alter database tempfile ‘/u01/temp01.dbf’ offline

Alter database tempfile ‘/u01/temp01.dbf’ drop;

或者使用方法二:

创建一个新的临时表空间,将数据的默认临时表空间设置为新的表空间

然后删除原有的表空间,全部使用新的表空间

Create temporary tablespace temp2 datafile ‘/u01/temp2.dbf’ size 100M;

Alter database default temporary tablespace temp2;

Alter tablespace temp1 offline

Drop tablespace temp1 including contents and datafiles

select file_name from dba_temp_files;

 

 

临时表空间存放的是什么数据?

主要是存放的索引,大量的分组查询信息。

 

 

只读表空间损坏:

在rman中使用backup database备份的时候,是可以备份只读表空间的,但是在使用restore database进行全库恢复的时候,默认是不会恢复只读表空间的,如果只读表空间损坏,需要使用restore datafile 7 命令来恢复指定的数据文件。

 

 

 

五、             联机日志文件丢失

 

联机日志的各种状态:

UNUSED:重未使用过,一般刚创建或open resetlogs打开后,是此状态

CURRENT:表示当前的

ACTIVE:活动的,虽然不是当前的,但也有可能正被使用或要被使用,比如crash recovery时可能存在此状态的redolog

CLEARING:正在清空,当alter database clear logfile时为此状态,执行后成UNUSED

CLEARING_CURRENT:正在清空,但是由于清空时出错如I/O设备无法访问,导致清空工作不能顺利完成,会被置于此状态

INACTIVE:不活动状态,表示该组日志中的内容已经被归档或顺利写入数据文件,该组日志可被继续重用。

 

 

 

非当前联机日志丢失

如果当前联机日志是好的,则可以添加新的联机日志组进去,然后在删除坏掉的联机日志组

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: ‘/u01/oracle/oradata/felix/redo01.log’

 

对于是已经归档的非当前日志组可以直接使用命令重建相关日志组成员:

重建一个日志成员:

alter database clear logfile ‘/u01/oracle/oradata/felix/redo01.log’;

重建一个日志组全部成员:

alter database clear logfile group 1;

对于是已经归档的非当前日志存储设备出现故障,需要更改目录的,需要添加一组新的日志组,然后在删除故障日志组:

Alter database add logfile group 4 ‘/u01/rodolog04.log’ size 100M;

Alter database drop logfile group1 ;

 

 

 

 

只有当前联机日志丢失:

抱歉,只有对本文发表过评论才能阅读隐藏内容。

数据库是可以起来了,这个时候要重新做完整的数据库备份。

 

 

联机日志全部丢失,有数据的完整备份:

首先进入到mount状态,重建非当前的联机日志组,或者添加新的联机日子组再删除损害的联机日志组,然后在使用数据库备份进行恢复和还原,操作和上面的一样。

 

 

联机日志丢失,而且也没有数据库备份,则需要强制启动数据库到不一致状态,然后使用exp命令做整库导出,然后在重新建立一个干净的数据库,在使用imp命令导入数据。

方法如下:(特别说明:该方法是死马当做活马医,在彻底没有解决方法的情况下才使用,后果是可能导致数据库损毁更严重,完全没救。

 

思路:我们先新建立一个表空间,然后删除联机日志文件,看看做不完全恢复后,这个刚建立的表空间是否还可以恢复,数据库能否正常启动。

 

抱歉,只有对本文发表过评论才能阅读隐藏内容。

六、             归档日志文件丢失

如果数据库是可以启动的,则归档日志丢失后最好做一次全库备份。

如果数据库也出现故障,并且归档日志丢失了一部分,则只能做不完全恢复,将数据库恢复到某一个时间点,或根据仅存的归档日志进行scn恢复。

 

 

七、             总结:

在哪些情况下数据库只能做不完全恢复?

1、  没有归档的联机日志丢失+数据库故障无法启动时

2、  当前联机日志丢失

3、  控制文件丢失(如果改变的数据量较小,根据完整的联机日志和归档日志并且buffercache中的脏数据块都写入到了数据文件中,可能可以全部恢复数据,但是这个情况是不确定的,通常控制文件丢失就会导致scn的不一致,应该是做不完全恢复的)

 

哪些情况下是需要进行restore database 和recover database 后才能进行恢复的?

1、  数据文件全部丢失

2、  当前联机日志文件丢失

其他情况是可以使用 restore datafile 和 recover datafile 来进行某个表空间的恢复的

 

在哪些情况下需要重新做全库备份?

1、  alter database open resetlogs;  使用了resetlogs开启的数据库必须要重做全库备份

2、  归档日志丢失,需要做全库备份。

 

 

作者:Felix.Chan

网站:http://www.rednat.com

记录日期:2012年3月28日星期三

原创文章,转载请注明: 转载自红防联盟www.rednat.com

本文链接地址: OCM实训:Oracle 10g 数据恢复综合练习

|2|right
17 条评论
  1. avatar
    ymh China Internet Explorer Windows 2012-04-20 22:14 回复

    谢谢

  2. avatar
    AllenHU China Internet Explorer Windows 2012-04-26 18:00 回复

    非常非常好

  3. avatar
    aka China Internet Explorer Windows 2012-05-12 22:15 回复

    学习

  4. avatar
    aka China Internet Explorer Windows 2012-05-12 22:17 回复

    期待关于ocm的更多内容

  5. avatar
    dwb China Google Chrome Windows 2012-05-15 11:45 回复

    很好,谢谢.

  6. avatar
    blackbat China Internet Explorer Windows 2012-06-02 19:39 回复

    非常非常好

  7. avatar
    dd China Mozilla Firefox Windows 2012-06-07 16:16 回复

    文章很实用,赞!

  8. avatar
    dada China Maxthon Windows 2012-06-07 16:16 回复

    再赞一下

  9. avatar
    blackcat China Internet Explorer Windows 2012-07-18 09:00 回复

    good

  10. avatar
    chandlerlee China Google Chrome Windows 2012-07-30 14:25 回复

    学习

  11. avatar
    周应侯 China Internet Explorer Windows 2012-09-16 09:23 回复

    非常好!

  12. avatar
    China Internet Explorer Windows 2012-09-28 10:30 回复

    很好

  13. avatar
    China Google Chrome Windows 2013-05-07 16:51 回复

  14. avatar
    xiaohuaidan248 China Safari iPhone 2013-07-14 00:19 回复

    xfggg

  15. avatar
    背向天堂 China Google Chrome Windows 2013-10-17 22:40 回复

    感谢。

  16. avatar
    zhangly China Internet Explorer Windows 2013-11-22 10:00 回复

    非常好,谢谢!

  17. avatar
    雾非雾 China Google Chrome Windows 2014-03-13 16:29 回复

    不错的内容

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>