当前位置:  数据库>oracle

ORA-01113问题的简单分析

    来源: 互联网  发布时间:2017-06-18

    本文导语: 在启动数据库的时候,open阶段总是可能出现各种各样的问题,比如让人胆战心惊的错误。ORA-01113: file 1 needs media recovery 自己留意了一下,其实还是有蛮多的场景会出现这个问题,有些细节可能没有注意到就会出现这个问题,比如...

在启动数据库的时候,open阶段总是可能出现各种各样的问题,比如让人胆战心惊的错误。ORA-01113: file 1 needs media recovery

自己留意了一下,其实还是有蛮多的场景会出现这个问题,有些细节可能没有注意到就会出现这个问题,
比如我们重建控制文件的时候。
 在重建控制文件之前做了shutdown abort的操作。

SQL> shutdown abort
 Oracle instance shut down.
 SQL> startup nomount
 ORACLE instance started.

Total System Global Area  314572800 bytes
 Fixed Size                  1261564 bytes
 Variable Size            163577860 bytes
 Database Buffers          142606336 bytes
 Redo Buffers                7127040 bytes
 SQL> CREATE CONTROLFILE REUSE DATABASE "TEST10G" NORESETLOGS  NOARCHIVELOG
  .....
  26    '/u02/oracle/oradata/data02.dbf'
  27  CHARACTER SET US7ASCII
  28  ;

Control file created.
尝试启动数据库的时候就会抛出这个错误。

SQL> alter database open;
 alter database open
 *
 ERROR at line 1:
ORA-01113: file 1 needs media recovery
 ORA-01110: data file 1: '/u02/oracle/oradata/TEST10G/disk5/system01.dbf'

其实这个时候简单分析一下就会明白,上次是shutdown abort的方式,则对应的检查点信息无法写入数据文件,在open阶段smon会做这个校验。
 开始在后台做数据的前滚,然后应用redo日志的数据,对某些操作做相应的回滚。
 从下面的地方可以看出 last_change#没有任何值,表明上次断电重启后检查点信息没有写入。
SQL> select file#,checkpoint_change#,last_change# from v$datafile;

    FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
 ---------- ------------------ ------------
          1            858940
          2            858940
          3            858940
          4            858940
          5            858940

SQL> select file#,checkpoint_change# from v$datafile_header;

    FILE# CHECKPOINT_CHANGE#
 ---------- ------------------
          1            858940
          2            858940
          3            858940
          4            858940
          5            858940

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
 ------------------
            858939
这个时候尝试恢复数据库,再次观察,则相应的检查点信息就做了校正。

SQL> recover database;
 Media recovery complete.
 SQL>  select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
 ------------------
            858939
 SQL>  select file#,checkpoint_change#,last_change# from v$datafile;

    FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
 ---------- ------------------ ------------
          1            859017      859017
          2            859017      859017
          3            859017      859017
          4            859017      859017
          5            859017      859017

SQL> alter database open;

Database altered.
数据库启动之后,last_change#的值又回归零。等待稍后的检查点写入。

SQL>  select file#,checkpoint_change#,last_change# from v$datafile;

    FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
 ---------- ------------------ ------------
          1            879019
          2            879019
          3            879019
          4            879019
          5            879019

SQL>  select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
 ------------------
            879019

其实这个过程中,恢复的基准就是检查点,也就是SCN.

当然在有些操作依赖于归档模式,介质恢复还是依赖于一些归档文件的。
 像在非归档模式尝试下面的操作就不可行。

SQL> alter tablespace data offline immediate;
 alter tablespace data offline immediate
 *
 ERROR at line 1:
 ORA-01145: offline immediate disallowed unless media recovery enabled


 SQL> alter tablespace data begin backup;
 alter tablespace data begin backup
 *
 ERROR at line 1:
 ORA-01123: cannot start online backup; media recovery not enabled

 这个时候还是启用归档。

SQL> shut immediate
 Database closed.
 Database dismounted.
 ORACLE instance shut down.
 SQL> startup mount
 ORACLE instance started.

Total System Global Area  314572800 bytes
 Fixed Size                  1261564 bytes
 Variable Size            163577860 bytes
 Database Buffers          142606336 bytes
 Redo Buffers                7127040 bytes
 Database mounted.
 SQL> alter database archivelog ;

Database altered.

SQL> alter database open;

Database altered.
如果在归档模式中,使用热备份,需要声明begin backup,为了能够修复在热备份过程中可能产生的分裂数据块。

SQL> alter tablespace data begin backup;

Tablespace altered.
这个时候停库就会抛错。

SQL> shutdown immediate;
 ORA-01149: cannot shutdown - file 5 has online backup set
 ORA-01110: data file 5: '/u02/oracle/oradata/data02.dbf'
如果发生断电现象,则在重启的时候出现ORA-01113: file 5 needs media recovery就需要明辨这个错误背后的意思
SQL> shutdown abort
 ORACLE instance shut down.
 SQL> startup
 ORACLE instance started.

Total System Global Area  314572800 bytes
 Fixed Size                  1261564 bytes
 Variable Size            163577860 bytes
 Database Buffers          142606336 bytes
 Redo Buffers                7127040 bytes
 Database mounted.
ORA-01113: file 5 needs media recovery
 ORA-01110: data file 5: '/u02/oracle/oradata/data02.dbf'

其实碰到这个错误,还是需要结合多种场景来考虑,比如查看是否热备份已经正常完成,之前的操作是什么样的?
SQL> desc v$backup
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
 FILE#                                              NUMBER
  STATUS                                            VARCHAR2(18)
  CHANGE#                                            NUMBER
  TIME                                              DATE

SQL> select *from v$backup;

    FILE# STATUS                CHANGE# TIME
 ---------- ------------------ ---------- ---------
          1 NOT ACTIVE                  0
          2 NOT ACTIVE                  0
          3 NOT ACTIVE                  0
          4 NOT ACTIVE                  0
          5 ACTIVE                879352 20-JUL-15
可以从SCN的地方看出和重建控制文件的场景还是存在一定的差别。
SQL> select file#,checkpoint_change#,last_change# from v$datafile;

    FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
 ---------- ------------------ ------------
          1            879275
          2            879275
          3            879275
          4            879275
          5            879352

SQL> select file#,checkpoint_change# from v$datafile_header;

    FILE# CHECKPOINT_CHANGE#
 ---------- ------------------
          1            879275
          2            879275
          3            879275
          4            879275
          5            879352

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
 ------------------
            879275
明白了问题,修复就很容易了,果断结束热备份。

SQL> alter tablespace data end backup;

Tablespace altered.

SQL> select file#,checkpoint_change# from v$datafile_header;

    FILE# CHECKPOINT_CHANGE#
 ---------- ------------------
          1            879275
          2            879275
          3            879275
          4            879275
          5            879352

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
 ------------------
            879275
这个时候启动数据库就没有问题了。

SQL> alter database open;

Database altered.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
 ------------------
            899361

SQL>  select file#,checkpoint_change# from v$datafile_header;

    FILE# CHECKPOINT_CHANGE#
 ---------- ------------------
          1            899361
          2            899361
          3            899361
          4            899361
          5            899361
其实热备份的这个错误也可以这么来处理。

SQL> alter tablespace data begin backup;

Tablespace altered.

SQL> shutdown abort
 ORACLE instance shut down.
 SQL> startup
 ORACLE instance started.

Total System Global Area  314572800 bytes
 Fixed Size                  1261564 bytes
 Variable Size            163577860 bytes
 Database Buffers          142606336 bytes
 Redo Buffers                7127040 bytes
 Database mounted.
 ORA-01113: file 5 needs media recovery
 ORA-01110: data file 5: '/u02/oracle/oradata/data02.dbf'

SQL> recover datafile 5;
 Media recovery complete.
 SQL> alter database open;

Database altered.

SQL> select *from v$backup;

    FILE# STATUS                CHANGE# TIME
 ---------- ------------------ ---------- ---------
          1 NOT ACTIVE                  0
          2 NOT ACTIVE                  0
          3 NOT ACTIVE                  0
          4 NOT ACTIVE                  0
          5 NOT ACTIVE            899488 20-JUL-15

总之解决问题就行,SCN的部分着实是需要关注的一个重点,这也是备份恢复的基石。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 出现ORA-01401和ORA-01008错误?
  • Eclipse连接Oracle数据库的ORA-00604 ORA-12705错误
  • oracle ORA-01114、ORA-27067错误解决方法
  • Oracle不能删除表 ORA-00604 ORA-01422 错误
  • 如何得到带有ora的行的下一行
  • ORA-12514及ORA-28547错误解决方案
  • 如何配置 linux 下 oracle 的 listener .ora 和
  • 浅析如何在tnsnames.ora中配置监听
  • Orcle的package中访问其它Schema的表报错ORA-00942解决方法
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • aq.executeQuery: ORA-00020: maximum number of processes (59) exceeded
  • Oracle 数据库闪回功能设置出现ORA-19809和ORA-19804错误
  • solaris10 安装 ora9.2.0.1 时报错
  • 在UNIX下,我的ORA817该怎么样才可以自己启动呀?
  • 基于ORA-12170 TNS 连接超时解决办法详解
  • plsql连接oracle数据库报ora 12154错误解决方法
  • 安装oracle出现error:ora-01031:insufficient privilleges的解决
  • 谁能帮忙解释一下: ORA-01000 : maximun open cursors exceeded
  • 我在Linux7。3下面装了一个Oracle8i,但是现在启动不起来了,总是报错ORA-01031: insufficient privileges
  • oracle 11g导出数据时报ORA 1455错误的处理方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3