ORA-01113问题的简单分析(r6笔记第3天)
在启动数据库的时候,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的部分着实是需要关注的一个重点,这也是备份恢复的基石。
- ASM 翻译系列第四十弹:理解ASM中 REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的含义
- 给XFN链接关系加上“nofollow”选项
- LVS中采用Jboss作为RealServer的配置要点
- 基于Prometheus的数据库监控
- Uva-------(11462) Age Sort(计数排序)
- hdu----(2848)Repository(trie树变形)
- 【MySQL】主从GTID复制修复
- hdu---(1800)Flying to the Mars(trie树)
- 解决Tomcat数据连接池无法释放
- hdu----(1075)What Are You Talking About(trie之查找)
- hdu--(1247)Hat’s Words(trie树)
- HDU----(4519)郑厂长系列故事——体检
- 张戈博客成功启用移动端主题:Mobile Pack
- Oracle数据库性能障碍分析利器:SYSTEMSTATE DUMP介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Executors功能如此强大,ThreadPoolExecutor功不可没(一)
- dotNET:怎样处理程序中的异常(实战篇)?
- 二维背包问题
- 小程序系列之禁用视频快进
- springBoot整合Mq报错:JmsMessagingTemplate that could not be found
- TCP:测试小工具TCPing
- 对象实例化内存布局与访问定位 Krains 2020-08-14
- 基于Docker Compose部署分布式MinIO集群
- Go语言 | 从并发模式看channel使用技巧
- 字节码文件 Krains 2020-08-04
- 为WordPress添加自定义设置上传头像功能
- 229. 求众数 II Krains 2020-08-04 16:03:03 数学
- 部署 Consul服务实现Docker容器跨主机通信
- 【测试】 Java如何优雅的生成测试数据
- Spring事物的传播行为案例分析