当前位置: 首页 > 编程日记 > 正文

oracle scn与数据恢复,SCN与数据库恢复的关系

一。SCN与CHECKPOINT

CKPT进程在checkpoint发生时,将当时的SCN号写入数据文件头和控制文件,同时通知DBWR进程将数据块写到数据文件。

CKPT进程也会在控制文件中记录RBA(redo block address),以标志Recovery需要从日志中哪个地方开始。

与checkpoint相关的SCN号有四个,其中三个存在控制文件中,一个存放在数据文件头中。

这四个分别是:

1.System Checkpoint SCN

当checkpoint完成后,ORACLE将System Checkpoint SCN号存放在控制文件中。

我们可以通过下面SQL语句查询:

select checkpoint_change# from v$database;

2.Datafile Checkpoint SCN

当checkpoint完成后,ORACLE将Datafile Checkpoint SCN号存放在控制文件中。

我们可以通过下面SQL语句查询所有数据文件的Datafile Checkpoinnt SCN号。

select name,checkpoint_change# from v$datafile;

3.Start SCN号

ORACLE将Start SCN号存放在数据文件头中。

这个SCN用于检查数据库启动过程是否需要做media recovery.

我们可以通过以下SQL语句查询:

select name,checkpoint_change# from v$datafile_header;

4.End SCN号

ORACLE将End SCN号存放在控制文件中。

这个SCN号用于检查数据库启动过程是否需要做instance recovery.

我们可以通过以下SQL语句查询:

select name,last_change# from v$datafile;

在数据库正常运行的情况下,对可读写的,online的数据文件,该SCN号为NULL.

二。SCN号与数据库启动、关闭

在数据库启动过程中,当System Checkpoint SCN、Datafile Checkpoint SCN和

Start SCN号都相同时,数据库可以正常启动,不需要做media recovery.三者当中有

一个不同时,则需要做media recovery.

ORACLE在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery.

如果数据库的正常关闭的话,将会触发一个checkpoint,同时将数据文件的END SCN号设置为相应数据文件的Start SCN号。当数据库启动时,发现它们是一致的,则不需要做instance recovery。在数据库正常启动后,ORACLE

会将END SCN号设置为NULL.

如果数据库异常关闭的话,则END SCN号将为NULL.则需要做instance recovery.

四。为什么需要System checkpoint SCN号与Datafile Checkpoint SCN号

为什么ORACLE会在控制文件中记录System checkpoint SCN号的同时,还需要为每个数据文件记录

Datafile Checkpoint SCN号?

原因有二:

1.对只读表空间,其数据文件的Datafile Checkpoint SCN、Start SCN和END SCN号均相同。

这三个SCN在表空间处于只读期间都将被冻结。

2.如果控制文件不是当前的控制文件,则System checkpoint会小于Start SCN或END SCN号。

记录这些SCN号,可以区分控制文件是否是当前的控制文件。

五。Recovery database using backup controlfile

当有一个Start SCN号超过了System Checkpoit SCN号时,则说明控制文件不是当前的控制

文件,因此在做recovery时需要采用using backup controlfile。这是为什么需要记录System

Checkpoint SCN的原因之一。

这里需要一提的是,当重建控制文件的时候,System Checkpoint SCN为0,Datafile Checkpoint SCN的数据来自于Start SCN。根据上述的描述,此时需要采用using backup controlfile做recovery.

六。示例

例子背景:

oracle 8i

windows

采用rman做热备,在备份期间,做不少事务,同时做alter system checkpoint.

RMAN> run {

2> allocate channel c1 type disk;

3> backup database filesperset 3 format 'e:/full_%p_%t.bak';

4> }

(这里需要一提的是,在这个备份角本里面我们加了filesperset 3。这样将整个数据库分成

两个备份集。这样还原出来的数据文件其checkpoint_change#将不一样。

否则由于数据库数据文件不多,都将包含在一个备份集中,这样即使在备份中做insert操作和alter system

checkpoint也不会产生不同的checkpoint_change#。因为rman备份是将一个备份集中的文件同时备份的。

而checkpoint_change#是存放在数据文件头部的,这样备份这些数据文件的头部的时间将是很快的。)

然后

RMAN> run{

2> allocate channel c1 type disk;

3> restore database;

4> }

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

------------------

2156662354

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

FILE# CHECKPOINT_CHANGE#

---------- ------------------

1 2156662355

2 2156662354

3 2156662322

4 2156662354

5 2156662354

6 2156662354

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

FILE# CHECKPOINT_CHANGE# LAST_CHANGE#

---------- ------------------ -------------

1 2156662355

2 2156662349

3 2156662322

4 2156662342

5 2156662349

6 2156662342

从这里可以看出,显然是需要做media recovery的。正常情况下,还需要做instance recovery.

当然由于没有在线日志,所以只能做resetlogs。

1.有归档日志存

若有归档日志在,则只需要做一个recover database until cancel;

然后即可alter database open resetlogs;

SQL> recover database until cancel (using backup controlfile);

ORA-00279: change 2156621770 generated at 10/07/2005 14:30:06 needed for thread 1

ORA-00289: suggestion : D:ORACLE8IRDBMSARC00738.001

ORA-00280: change 2156621770 for thread 1 is in sequence #738

Specify log: {=suggested | filename | AUTO | CANCEL}

auto

ORA-00279: change 2156621779 generated at 10/07/2005 14:30:51 needed for thread

1

ORA-00289: suggestion : D:ORACLE8IRDBMSARC00739.001

ORA-00280: change 2156621779 for thread 1 is in sequence #739

ORA-00278: log file 'D:ORACLE8IRDBMSARC00738.001' no longer needed for this recovery

ORA-00308: cannot open archived log 'D:ORACLE8IRDBMSARC00739.001'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

SQL> alter database open resetlogs;

Database altered.

2.无归档日志

如果没有归档日志,由于restore出来是没有在线日志的。

如果v$datafile_header中checkpoint_change#是相同的,此时由于控制文件中checkpoint_change#

比数据文件头中要高,所以数据库还是需要做media recovery。

此时重建控制文件还是一样的,因为重建控制文件后,在控制文件中checkpoint_change#为0,

与文件头的checkpoint_change#还是不一样,还需要media recovery.且由于控制文件中checkpoint_change#

比文件头中要高,所以做recover时还需要加上using backup controlfile.

注意,这时由于没有在线日志,所以重建控制文件需要将noresetlogs改成RESETLOGS才可以创建成功,

否则会报以下错误:

ORA-01565: error in identifying file 'D:ORACLE8IORADATAORA8IREDO01.LOG'

ORA-27041: unable to open file

如:

CREATE CONTROLFILE REUSE DATABASE "ORA8I" RESETLOGS ARCHIVELOG

MAXLOGFILES 32

MAXLOGMEMBERS 2

MAXDATAFILES 254

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 'D:ORACLE8IORADATAORA8IREDO01.LOG' SIZE 1M,

GROUP 2 'D:ORACLE8IORADATAORA8IREDO02.LOG' SIZE 1M,

GROUP 3 'D:ORACLE8IORADATAORA8IREDO03.LOG' SIZE 1M

DATAFILE

'D:ORACLE8IORADATAORA8ISYSTEM01.DBF',

'D:ORACLE8IORADATAORA8IRBS01.DBF',

'D:ORACLE8IORADATAORA8IUSERS01.DBF',

'D:ORACLE8IORADATAORA8ITEMP01.DBF',

'D:ORACLE8IORADATAORA8ITOOLS01.DBF',

'D:ORACLE8IORADATAORA8IINDX01.DBF'

CHARACTER SET ZHS16GBK

;

此时scn号信息如下:

SQL> select CHECKPOINT_CHANGE#,CONTROLFILE_CHANGE# from v$database;

CHECKPOINT_CHANGE# CONTROLFILE_CHANGE#

------------------ -------------------

0 0

此时由于没有归档日志和在线日志,无法做recovery。

SQL> recover database using backup controlfile until cancel;

ORA-00279: change 2156662342 generated at 10/07/2005 17:06:27 needed for thread 1

ORA-00289: suggestion : D:ORACLE8IRDBMSARC00749.001

ORA-00280: change 2156662342 for thread 1 is in sequence #749

Specify log: {=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below

ORA-01152: file 1 was not restored from a sufficiently old backup

ORA-01110: data file 1: 'D:ORACLE8IORADATAORA8ISYSTEM01.DBF'

ORA-01112: media recovery not started

所以也就无法做alter database open Resetlogs了。

此时可以加上_allow_resetlogs_corruption隐含参数,然后就可以alter database open resetlogs

将数据库打开了。

当然如果v$datafile_header中checkpoint_change#是不相同的,那么此时就没有什么常归有效的办法能将

数据库打开了。

如果相差不多,加上隐含参数_allow_resetlogs_corruption,然后alter database open resetlogs

还是有可能可以打开的。这个参数oracle是不建议加的,且加上这个参数也只是有可能可以打开。

这个参数是以最oldest的scn将数据库打开,所以最好system数据文件的scn号是最oldest的,否则容易产生

大量的600号错误。

相关文章:

Java 理解泛型的基本含义

Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 泛型方法 你可…

java严格区分大小写吗_Java是否区分大小写?

我在某处读到Java是区分大小写的。 我一直无法证实这一点。Java源代码是区分大小写的,如果你的意思是。 即Double与double不是同一个types,并且可以有两个不同的variablesmyData和mydata 。是吗? 如果是这样,为什么?区…

4、Hibernate查询语句

转载于:https://www.cnblogs.com/wyl9527/p/6484099.html

循环控制体重C语言,中年以后很容易发福变胖?4个建议帮你控制体重,保持轻盈体态...

随着年龄的增长,尤其是40岁以后,我们会发现,对待自己的体重与身材之时会显得很无力,在年轻的时候,减掉几斤的体重并不难,而到了中年以后则会变得很困难,即使减重成功,也非常容易反弹…

oracle异地迁移,数据泵实现Oracle数据迁移到异地库

今天发现impdp命令有个特殊的用途,可以将数据库的一个用户迁移到另一台机器上的数据库的用户中。如果目标用户不存在,还可以对应的创建该用户。下面就来看一下命令格式:Impdpusername/passwddbsnameremap_schemauserA:userB remap_tablespace…

轨迹系列1——一种基于路网图层的GPS轨迹优化方案

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 GPS数据正常情况下有20M左右的偏移,在遇到高楼和桥梁等情况下偏移会更大。本方案讨论基于路网图层如何来进行轨迹优化。 2.数据预处理…

c语言如何输出整串链表,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include //malloc头文件struct Student //定义结构体{int num;struct Student *next; //指向下一个数据节点的指针};int n;struct Student *creat() //定义建立链表的函数{n0;struct Student *p1,*p2,*head;p1p…

java基于http协议编程_Java中基于HTTP协议网络编程

java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来访问Web服务功能,这篇博客,就跟大家分享一下,Java中的网络编程的知识,主要是学习下该java.net包下的API。URI——>URLURI:表示的是统一的资源标识…

json问题小结

json 键值对增加、删除 obj.keyvalue; // obj.keyobj[key]eval("obj."key); delete obj.key; vue中新增和删除属性 this.$set(object,key,value) this.$delete( object, key ) 触发视图更新 遍历键值 for (var key in data) {console.log(key:data[key]); //键:值 } …

windows 如何安装oracle 补丁包,Windows Server 2003 上安装 Oracle10g(10.2.0.1)并升级 至补丁(10.2.0.4) 图解...

Windows Server 2003 上安装 Oracle10g(10.2.0.1)并升级 至补丁(10.2.0.4) 图解第一部分:安装 Oracle 10.2.0.11、选择安装方法2、选择安装类型3、指定安装目录4、检查先决条件5、选择配置选项6、选择数据库配置7、指定数据库配置选项8、选择数据库管理选项9、指定数…

C++通过HTTP请求Get或Post方式请求Json数据(转)

原文网址&#xff1a;https://www.cnblogs.com/shike8080/articles/6549339.html #pragma once#include <iostream>#include <windows.h>#include <wininet.h> using namespace std; //每次读取的字节数#define READ_BUFFER_SIZE 4096 enum HttpInterfaceErr…

工厂模式 android,当Android遇见工厂模式

设计模式.png我们先看一下一个Android系统应用中的工厂模式列子&#xff0c;再讲解工厂模式。package com.android.mms.ui;import android.content.Context;import android.util.Log;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException…

抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

在工厂方法模式中&#xff0c;工厂只负责生产具体的产品&#xff0c;每一个具体的工厂对应着一个具体的产品&#xff0c;工厂方法也具有唯一性&#xff0c;如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品&#xff0c;例如&#xff1a;海尔品牌不止生产海尔TV…

npm-run 自动化

为什么使用npm run 插件不需要全局安装&#xff0c;只要安装在工程项目中&#xff0c;npm上的包提供了命令行接口&#xff0c;可以直接使用这些局部安装的插件; 举例&#xff08;babel&#xff09;&#xff1a; 在工程项目中局部安装babel、转码规则后&#xff0c;直接在终端中…

docker 安装 oracle12,使用Docker安装Oracle 12c

使用Docker安装Oracle 12c假设你的服务器已成功安装Docker&#xff0c;继续进行以下操作&#xff1a;1. 启动Docker[rootnode01 ~]# service docker start2. 从远程仓库搜索oracle image[rootnode01 ~]# docker search oracleINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDd…

python3 面向对象(一)

以Student类为例&#xff0c;定义类通过 class 关键字 class Student(object):pass class 后面紧接着是类名&#xff0c;即 Student&#xff0c;类名通常是大写开头的单词&#xff0c;紧接着是 (object)&#xff0c;表示该类是从哪个类继承下来的 >>> stu Student() …

shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务

简介最近运维人员提出需求&#xff0c;增加一个运维页面&#xff0c; 查询当前的业务进程信息包括&#xff1a;进程名称、启动命令、启动时间、运行时间等&#xff0c;可以通过页面点击重启按钮&#xff0c;可以重启后端的一系列系统进程。思路java程序获取linux进程信息可以通…

signature=680da11b802226668317d65ae7c38eb7,encryption with designated verifiers

摘要&#xff1a;The offline keyword guessing attack (KG attack) is a new security threat to the searchable public key encryption with designated verifier. Many techniques have been proposed to resist such an attack. However, all these techniques are only s…

PHPMailer类 发送邮件

/*** [sendMail 邮件发送类]* param [string] $address [收件人的邮件地址]* param [string] $nickname [收件人的昵称]* param [string] $subject [邮件的标题]* param [string] $content [邮件的内容]* param [string] $attachment [邮件的附件]* return …

oracle两张表 比较好,比较Oracle两张表的数据是否一样

比较Oracle两张表的数据是否一样爱搞机 2008-10-21 11:00在某些情况下&#xff0c;我们会需要比较两张表的数据是否一样。假设有两张表A与表B他的字段相同&#xff0c;但是当中的数据可能不同&#xff0c;而且有些字段的数据还有可能为空方法一(手动)&#xff1a;把需要比较的两…

java applet 缺陷_Java Applet在最新JRE上的奇怪性能行为(7.55)

我们使用来自签名提供商的一些专有小程序来签署一些XML.当我们使用JRE 6u37 applet运行没有问题 – 运行速度非常快,从不冻结.但是当我们将JRE更新为7u55或更新时,它经常开始挂起.只有浏览器重启帮助.有没有办法解决这个问题可能是由一些参数或其他东西&#xff1f;这是运行代码…

在线考试系统html模板,请问谁有在线考试系统的网页模板?

请问谁有在线考试系统的网页模板&#xff1f;(2017-03-22 22:58:03)标签&#xff1a;杂谈《帝国网站管理系统》英文译为"EmpireCMS"&#xff0c;简称"Ecms"&#xff0c;它是基于B/S结构&#xff0c;且功能强大而帝国CMS-logo易用的网站管理系统。本系统由帝…

三角形(css3)

1 .userCard .sanjiao {//三角形的制作&#xff1b;2 width: 0;3 height: 0;4 border-left: 10px solid transparent;5 border-right: 10px solid transparent;6 border-bottom: 10px solid rgba(0, 0, 0, .9);7 margin: -23px 0 0 -10px;8 left: …

MySQL数据copy

摘自http://database.51cto.com/art/201011/234776.htm 1. 下面这个语句会拷贝表结构到新表newadmin中。 &#xff08;不会拷贝表中的数据&#xff09; CREATE TABLE newadmin LIKE admin 2. 下面这个语句会拷贝数据到新表中。 注意&#xff1a;这个语句其实只是把select语句…

oracle数据库有哪些文件构成,Oracle数据库架构中包括几层?每层都有什么元素?...

Oracle数据库架构中包括几层&#xff1f;每层都有什么元素&#xff1f;1 PL/SQL代表 A PROCEDURAL LANGUAGE/SQL B PROGRAM LANGUAGE SQL C POWER LANGUAGE SQL D 都不对2 _____引擎执行PL/SQL块A SQL B PL/SQL C ORACLE D 都不对3 一个对象可以呈现多种形式的能力称为A 多态B …

用html怎么 显示直线,html怎么用鼠标画出一条直线,鼠标移动时候要能看到线条...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼window.onload function(){var oC document.getElementById(c1);var oGC oC.getContext(2d);oC.onmousedown function(ev){var ev ev || window.event;oGC.beginPath();oGC.moveTo(ev.clientX-oC.offsetLeft,ev.clientY-oC.of…

bzoj 1962: 模型王子

呵呵呵呵http://wenku.baidu.com/link?urlo0CPVzuBDLJMt0_7Qph1T7TtdFOzu7O-apIpvaWbIYMz8ZWqBneGqI8LGtLdqpuK5fbQ_v-H01zHwPXDsPrioR5xjCDHjqJn_boYO87ikr_ 1 #include <bits/stdc.h>2 #define LL long long3 #define lowbit(x) x&(-x)4 #define inf 0x3f3f3f3f5 …

cygwin编译verilator_Windows 安装 verilator

windows bubun(cygwin)下载verilatortar xvzf verilator*.t*gzcd verilator*./configure报错./configure /cygdrive/e/download/verilator-4.016configuring for Verilator 4.016 2019-06-16checking whether to use hardcoded paths... yeschecking whether to show and stop …

navicat 几个 可用的东西

1.常用的 表格 一启动 就进入的某某连接某某数据库某某表 2. 结构 比对&#xff08;菜单栏 “工具里面”&#xff09; 3.数据对比 同上 4.保持连接 5.全局查询 在工具中查找 ------在数据库或模式中查找 转载于:https://www.cnblogs.com/hnqm/p/9534942.html

linux内核 semaphore,2.4内核里semaphore源码的一个疑问

博主你好, 请教一个问题.__down()里面有一段代码, 我觉得不那么保险.我先把__down的源码贴出来:void __down(struct semaphore * sem){struct task_struct *tsk current;DECLARE_WAITQUEUE(wait, tsk); //定义一个"队列项", 等待者是当前进…