Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

8

主题
1#
发表于 2013-9-15 19:37:03 | 查看: 6515| 回复: 4
各位大神
  我在学习中遇到一些问题,找了很多资料,还是没想明白,希望知道的大神百忙中能够指点一二。十分感谢!
问题如下:
我的第二个实验打开数据库时,为什么会报需要介质恢复呢???,oracle到底是根据什么来判断是否需要介质恢复的呢?
(oracle 不是通过System Checkpoint SCN=Datafile Checkpoint SCN=Start SCN三个scn号是否相等来判断是否需要介质恢复吗???)
实验环境redhat5.5+oracle10.2.0.5

实验一
1)alter database backup controlfile to trace;
2)shutdown immediate;
3)rm -rf contr* >删除数据库所有控制文件
4)startup nomount;
5)以NORESETLOGS ARCHIVELOG方式重建控制文件(用第一步中生成的create命令)
6)查看如下视图
select checkpoint_change# from v$database;
select name,checkpoint_change# from v$datafile;
select name,checkpoint_change# from v$datafile_header;
以上三个视图查出的scn完全相等(即System Checkpoint SCN=Datafile Checkpoint SCN=Start SCN)
7)alter database open; >(数据库正常打开)

实验二
1)alter database backup controlfile to trace;
2)shutdown abort;
3)rm -rf contr* >删除所有控制文件
4)startup nomount;
5)以NORESETLOGS ARCHIVELOG方式重建控制文件(用第一步中生成的create命令)
6)查看如下视图
select checkpoint_change# from v$database;
select name,checkpoint_change# from v$datafile;
select name,checkpoint_change# from v$datafile_header;
以上三个视图查出的scn完全相等(即System Checkpoint SCN=Datafile Checkpoint SCN=Start SCN)
7)SQL> alter database open;-
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery if it was restored from backup, or END
BACKUP if it was not
ORA-01110: data file 1: '/oradata/rman/system01.dbf'
实验二在最后一步打开数据库时报错,需要介质恢复。但是根据第六步的查询结果可以判断数据库不需要介质恢复啊???
请问一下大师们,oracle是如何判断我实验二需要进行介质恢复的呢???(因为在我的理解中是否需要介质恢复是根据第六步中查出的三中类型检查点是否一致来判断的,难道我的理解有错误吗???)
2#
发表于 2013-9-16 11:22:52
主要是因为shutdown immediate和shutdown abort;区别,它们俩估计有做特殊处理导致你需要介质恢复,内部怎么处理应该有大神研究过,小弟也想知道一二,谢谢!

回复 只看该作者 道具 举报

3#
发表于 2013-9-16 12:00:50
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           6165759

SQL> select name,checkpoint_change# from v$datafile;

NAME                                                                   CHECKPOINT_CHANGE#
---------------------------------------------------------------------- ------------------
C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF                                      6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\EXAMPLE01.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSAUX01.DBF                                      6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\MACLEAN1.DBF                                      6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\UNDOTBS01.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\USERS01.DBF                                       6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART1.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART2.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\LOW_COST_STORE.DBF                                6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\SOURCE_TBS.DBF                                    6165759

已选择 10 行。

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

NAME                                                                   CHECKPOINT_CHANGE#
---------------------------------------------------------------------- ------------------
C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF                                      6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\EXAMPLE01.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSAUX01.DBF                                      6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\MACLEAN1.DBF                                      6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\UNDOTBS01.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\USERS01.DBF                                       6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART1.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\ILM_PART2.DBF                                     6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\LOW_COST_STORE.DBF                                6165759
C:\APP\XIANGBLI\ORADATA\MACLEAN\SOURCE_TBS.DBF                                    6165759

已选择 10 行。



前面和你的演示2的步骤一样, shutdown abort ,重建控制文件

----- END DDE Actions Dump (total 0 csec) -----
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF'
kcvcrv: Entering kcvcrv()DDE rules only execution for: ORA 1110








SQL> oradebug setmypid
已处理的语句
SQL> oradebug dump controlf 3;
已处理的语句
SQL> oradebug tracefile_name
C:\APP\XIANGBLI\diag\rdbms\maclean\maclean\trace\maclean_ora_5668.trc

我们dump controlfile 来看一下

DATA FILE #1:
  name #17: C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF
creation size=0 block size=8192 status=0x12 flg=0x1 head=17 tail=17 dup=1


status=0x12   ==>  0x0010 KCCFEMRR  && 0x0002 KCCFEONL  ==>说明这个文件需要恢复和 之前是online状态

KCCFESTS 0x0001 * belongs to System TableSpace *
KCCFEONL 0x0002 * file is ONLine *
KCCFERDE 0x0004 * ReaDing is Enabled *
KCCFECGE 0x0008 * ChanGing is Enabled *
KCCFEMRR 0x0010 * Media Recovery Required *
KCCFEGEM 0x0020 * Generate End hot backup Marker at next open *
KCCFECKD 0x0040 * File entry generated by check dictionary *
KCCFESOR 0x0080 * Save Offline scn Range at next checkpoint *
KCCFERMF 0x0100 * Renamed Missing File *
KCCFEGOI 0x0200 * Generate Off-line Immediate marker *


SQL> recover database ;
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL>
SQL>
SQL>
SQL> startup mount;


在不重建控制文件的情况下, shutdown abort 并 dump controlf

SQL> oradebug setmypid
已处理的语句
SQL> oradebug dump controlf 3;
已处理的语句
SQL> alter database open;


数据库已更改。



***************************************************************************
DATA FILE RECORDS
***************************************************************************
(size = 520, compat size = 520, section max = 100, section in-use = 12,
  last-recid= 2, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 11, numrecs = 100)
DATA FILE #1:
  name #17: C:\APP\XIANGBLI\ORADATA\MACLEAN\SYSTEM01.DBF
creation size=0 block size=8192 status=0xe flg=0x1 head=17 tail=17 dup=1
pdb_id 0, tablespace 0, index=1 krfil=1 prev_file_in_ts=0 prev_file_in_pdb=0

status=0xe ==>

1110  =>  0x08   & 0x04 & 0x02 = > KCCFECGE  & KCCFERDE & KCCFEONL

==> 没有KCCFEMRR 0x0010 * Media Recovery Required *


这说明了 重建控制文件时  将 文件的status做了修改 计入了KCCFEMRR 0x0010 * Media Recovery Required *

回复 只看该作者 道具 举报

4#
发表于 2013-9-16 21:32:54
1)
那我的实验一,也重建了控制文件但是打开的时候没有需要介质恢复啊?  
2)
oracle判断是否需介质恢复的机制是什么呢?网上有人说是根据checkpoint cnt,有说根据System Checkpoint SCN=Datafile Checkpoint SCN=Start SCN这三个scn是否相等。十分晕啊!不是道到底是怎么判断是否需要介质恢复???


回复 只看该作者 道具 举报

5#
发表于 2013-9-16 22:41:22
1、你的实验1 是consistent shutdown ,   create controlf时会检验文件头的 如果发现不存在 fuzzy状态,那么显然 不会加上KCCFEMRR 0x0010 * Media Recovery Required *的表示

这一点你可以自己去实验下


2、 对于前滚 网上所有的说法都是 不完整和准确的, 我目前也没有精力来整理  这个流程

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-6-14 18:17 , Processed in 0.047637 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569