iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >对备份恢复有重要意义的控制文件记录项
  • 613
分享到

对备份恢复有重要意义的控制文件记录项

2024-04-02 19:04:59 613人浏览 八月长安
摘要

整理自:临危不惧oracle11g数据库恢复技术对备份恢复有重要意义的控制文件记录项dbiddbid保存在控制文件中,在数据文件和日志文件的头部也存在,其作用是判断控制文件、数据文件、日志文件是否属于同一个

整理自:临危不惧oracle11g数据库恢复技术


对备份恢复有重要意义的控制文件记录项


dbid

dbid保存在控制文件中,在数据文件和日志文件的头部也存在,其作用是判断控制文件、数据文件、日志文件是否属于同一个数据库


数据库名

此信息与dbid一致。


控制文件序列号

该序列号是判断控制文件是否过旧的要素之一,在控制文件被更新后就会增长。控制文件增长包括检查点信息更新、创建或删除表空间等。

控制文件序列号在数据文件和日志文件的头部也有,但与控制文件中的不同,它们在自身的头部被更新时从当时的控制文件中复制的。

在库运行时,当数据文件和日志文件的头部被更新后,控制文件必须复制其部分内容,所以一般情况下,控制文件序列号必须大于数据文件和日志文件头部中的控制文件序列号。否则,当前控制文件被认为是旧的。

select controlfile_sequence# from v$database;

select hxfil as file#,fhcsq as controlfile_sequence# from x$kcvfh;

oracle不会只依赖控制文件序列号来判断控制文件是否旧的,还依赖控制文件检查点,如果序列号检验没有通过,那就没有必要校验控制文件检查点scn了。


控制文件检查点scn

该scn也是判断控制文件是否是旧的要素之一。完全检查点把scn更新到控制文件中和数据文件头

而增量检查点仅更新到控制文件中。无论哪一种检查点,scn在控制文件中由一个称为控制文件检查点scn的记录表示。

在数据库open状态下,该scn一定大于或是等于current日志文件中的低位scn(v$log.first_change#),同时,控制文件检查点 SCN 的值一定大于所有数据文件头部的检查点SCN号,否则控制文件被认为是旧的,实例恢复无法启动。

select controlfile_sequence#,controlfile_change# from v$database;

select group#,sequence#,first_change# from v$log where status='CURRENT';


数据库检查点scn

控制文件中保存的数据库检查点scn实际是在所有数据文件头部中最小的检查点scn,根据它的值与每个日志文件的高、低scn比较,oracle确定需要使用哪个日志文件。


在线日志低位(first_change#)和高位scn(next_change#)

日志文件中重做记录范围由这两个scn来表示,低位scn是指日志文件中第一条重做记录的scn,高位scn是指下一个日志文件中的第一个重做记录的scn


rman资料库

在默认情况下,控制文件即数据库的rman资料库。相关记录包括:rman的配置、闪回日志路径、重做日志历史、归档路径及属性、rman备份集信息、rman镜像复制信息、rman备份集和rman镜像复制中损坏的块信息、数据文件中坏块信息等。


还原点信息

还原点是scn的别名,通过create restore point命令创建,主要用于闪回技术,保存在控制文件中


重设日志scn

每次使用resetlogs子句打开数据库时的scn,日志文件和数据文件头部也会保存此scn,每次打开数据库,oracle都会检查它们是否一致,resetlogs一般是不完全恢复的结果。


Oracle内部主要存在以下四种SCN 

1.系统检查点(system checkpoint)SCN 

每当一个检查点完成时,Oracle就把该检查点对应的SCN记录到控制文件中,可以用以下语句查看当前数据库 的检查点SCN: 

SYS@xbtst sql>select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           2084301

2.数据文件头SCN(数据文件的启动SCN) 

该SCN记录在每个数据文件头中,正常情况下,该SCN应该和记录在控制文件中的检查点SCN一致,可以用以下语句查看数据文件头的SCN: 

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

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

3.数据文件的检查点SCN和终止SCN 

这两个SCN不是记录在数据文件中,而是记录在控制文件中,可以通过以下语句查看: 

SYS@xbtst SQL>select checkpoint_change#,last_change# from v$datafile; 

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           2084301
           2084301
           2084301
           2084301
           2084301

那么Oracle是如何根据这些不同的SCN来判断某个数据文件是否需要恢复以及恢复类型呢?可以用下面的伪代码描述:

if (数据文件检查点SCN < 数据文件头SCN)
  then "控制文件来自备份,需要进行不完全恢复,恢复之后得用resetlog方式打开”
  
else if (数据文件检查点SCN > 数据文件头SCN)
    then "数据文件来自备份,需要log进行完全或不完全恢复"
  
else if (数据文件检查点SCN = 数据文件头SCN) 
   then "数据库能正常open,还需要判断是否需要实例恢复"
   
   if (数据文件终止SCN = 数据文件检查点SCN)
   then "数据库打开时不需要实例恢复“
       
   else if (数据文件终止SCN = NULL)
      then "数据库需要实例恢复"



您可能感兴趣的文档:

--结束END--

本文标题: 对备份恢复有重要意义的控制文件记录项

本文链接: https://www.lsjlt.com/news/42146.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql中year是集函数吗
    否,year 不是 sql 中的聚合函数。year 函数是一个日期函数,用于从给定的日期值中提取年份。它是一个标量函数,返回单个值,而不是值的集合。相反,聚合函数对一组值进行操作并生成一...
    99+
    2024-05-16
    聚合函数
  • sql中between的用法
    sql 中 between 运算符用于检查值是否在指定范围之内,其语法为:select column_name from table_name where colum...
    99+
    2024-05-16
  • sql中update用法
    sql 中的 update 语句用于更新表中的现有数据,通过指定要更新的表、列、值和可选的更新条件来实现,可更新特定行或组行的特定列值。 SQL 中的 UPDATE 语句 什么是 UP...
    99+
    2024-05-16
  • sql中for循环的用法
    sql 中 for 循环可用于遍历结果集,逐行执行操作。语法:for var_name in (select_statement) [loop_statement] end f...
    99+
    2024-05-16
  • sql中any和all的区别
    sql 中 any 和 all 运算符的区别在于:any 检查子查询中是否存在满足条件的行,返回 true 或 false。all 检查子查询中所有行是否都满足条件,返回 true 或 ...
    99+
    2024-05-16
  • sql中exists具体用法
    exists 子查询用于检查外层查询中的行是否存在匹配记录,用法如下:包含在 select 语句的 where 子句中。返回布尔值 true (存在匹配) 或 fal...
    99+
    2024-05-16
  • sql中union用法
    union 运算符在 sql 中用来合并相同结构的表或子查询的结果集,排除重复行。它具有以下用法:合并具有相同列名和数据类型的多个表或子查询的结果集合并为一个。排除结果集中重复...
    99+
    2024-05-16
  • sql中索引的用法
    sql 中索引是一种通过创建数据指针来提高查询性能的技术,主要用于where、order by、join和group by子句。索引类型包括聚集索引、非聚集索引、主键索引、唯一...
    99+
    2024-05-16
    聚合函数
  • sql中nullif怎么用
    sql 中的 nullif() 函数,用于比较两个表达式并返回较小的值,若均为 null 则返回 null,语法为 nullif(expression1, expression2)。可用...
    99+
    2024-05-16
  • sql中decode用法
    decode 函数根据输入表达式值将值转换为另一个值,语法为 decode(expression, value1, result1, value2, result2, ..., defa...
    99+
    2024-05-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作