博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORA-01113问题的简单分析
阅读量:2445 次
发布时间:2019-05-10

本文共 6147 字,大约阅读时间需要 20 分钟。

在启动数据库的时候,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的部分着实是需要关注的一个重点,这也是备份恢复的基石。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1742631/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-1742631/

你可能感兴趣的文章
git 应用程序本身更新_如何使用Git通过SFTP正确部署Web应用程序
查看>>
使用Pspell查找和纠正拼写错误的单词
查看>>
如何在Windows上安装Ghost
查看>>
phpstorm -xmx_PhpStorm 8-新功能
查看>>
SitePoint Podcast#178:Web设计过程和创造力
查看>>
畅谈理想未来为主题的铅笔画_与专家畅谈Node.js
查看>>
SitePoint Podcast#173:释放混乱的猴子
查看>>
php 查询成绩_与专家讨论PHP: 成绩单
查看>>
一年新的一年_一年的云创新
查看>>
使用PHP从Access数据库中提取对象,第2部分
查看>>
openbiz_Openbiz Cubi:健壮PHP应用程序框架,第1部分
查看>>
使用PHP从Access数据库中提取对象,第1部分
查看>>
使用云waf的案例_9种流行的云使用案例
查看>>
类集合转换类集合_PHP中的集合类
查看>>
使用SimplePie消费Feed
查看>>
运算符二进制_基本转换和二进制运算符
查看>>
SitePoint播客#121:在线社区圆桌会议第2部分
查看>>
pchart_用pChart绘制图表
查看>>
Git简介,第1部分
查看>>
微信 获取地理位置名称_使用地理名称的目标地理位置
查看>>