SCN系统变更号以及它和恢复的关系

一、SCN基础

1、什么是scn?

在oracle数据库中保证数据一致性的方法就是事务。事务是一个逻辑的、原子性的作业单元,通常由一个或多个sql组成,一个事务中的所有sql操作,要么失败全部回滚,要么成功全部提交。数据库的事务最主要的作用就是保证了数据的一致性,每次事务的提交都是将数据库从一种一致性状态带进另外一种一致性状态。

scn在数据库中是一个单一的不断的随着数据库一致性状态的改变而自增的序列。每个scn值代表着数据库运行中的一个一致性的点。

2、SCN概述

2.1、系统检查点scn(systmen checkpoint scn)

存在于控制文件,检查点进程启动、全局范围内,oracle就把系统检查点scn记录到控制文件中。

SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

2.2、文件检查点scn(datafile checkpoint scn)

存在于控制文件,检查点进程启动、全局范围内以及文件级别的检查点(将表空间只读、begin backup或某个文件置为offline),oracle把该检查点记录到控制文件中。

SQL> alter tablespace testtbs04 begin backup;

SQL> select

2    ts.name "表空间名"

3    , df.file# "文件号"

4    , df.checkpoint_change# "检查点"

5    , df.last_change# "终止检查点"

6    , df.name "文件名"

7    from v$tablespace ts,v$datafile df

8  where ts.ts#=df.ts#

9  order by df.file#;

表空间名                           文件号     检查点 终止检查点 文件名

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

SYSTEM                                  1     745206            /oracle/oradata/boss/system01.dbf

UNDOTBS1                                2     745206            /oracle/oradata/boss/undotbs01.dbf

SYSAUX                                  3     745206            /oracle/oradata/boss/sysaux01.dbf

USERS                                   4     745206            /oracle/oradata/boss/users01.dbf

EXAMPLE                                 5     745206            /oracle/oradata/boss/example01.dbf

TESTTBS01                               6     745206            /oracle/oradata/boss/testtbs01_01.dbf

TESTTBS01                               7     745206            /oracle/oradata/boss/testtbs01_02.dbf

TESTTBS02                               8     745206            /oracle/oradata/boss/testtbs02_01.dbf

TESTTBS03                               9     652799     652799 /oracle/oradata/boss/testtbs03_01.dbf

TESTTBS04                              10     745405            /oracle/oradata/boss/testtbs04_01.dbf

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC

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

1 /oracle/oradata/boss/system01.dbf        ONLINE              745206 NO

2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              745206 NO

3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              745206 NO

4 /oracle/oradata/boss/users01.dbf         ONLINE              745206 NO

5 /oracle/oradata/boss/example01.dbf       ONLINE              745206 NO

6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              745206 NO

7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              745206 NO

8 /oracle/oradata/boss/testtbs02_01.dbf    ONLINE              745206 NO

9 /oracle/oradata/boss/testtbs03_01.dbf    ONLINE              652799

10 /oracle/oradata/boss/testtbs04_01.dbf    ONLINE              745405 NO

2.3、终止scn(stop scn)

保存在控制文件,每个数据文件都有一个终止scn,数据库正常运行中,只要数据文件在线且是可读写的,结束scn为null,否则就存在具体的scn值。

2.4、数据文件头scn(start scn)

保存在数据文件中,系统以及文件级别的检查点

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

3、scn的相关概念

3.1、redo log中的high scn和low scn

一个重做日志写满后,会自动切换到下一个重做日志,上一个重做日志的high scn就是下一个重做日志的low scn,current log 的high scn无穷大。

SQL> select recid,sequence#,first_change#,next_change# from v$log_history;

RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#

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

1          1        707655       707656

2          1        710834       741781

3          2        741781       744120

4          3        744120       745576

SQL> select group#,members,sequence#,archived,status,first_change# from v$log;

GROUP#    MEMBERS  SEQUENCE# ARC STATUS           FIRST_CHANGE#

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

1          1          2 YES INACTIVE                741781

2          1          3 YES INACTIVE                744120

3          1          4 NO  CURRENT               745576

##转储当前重做日志

SQL> alter system dump logfile ‘/oracle/oradata/boss/redo03.log‘;

SQL> alter system switch logfile;

SQL> select group#,members,sequence#,archived,status,first_change# from v$log;

GROUP#    MEMBERS  SEQUENCE# ARC STATUS           FIRST_CHANGE#

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

1          1          5 NO  CURRENT                 747335

2          1          3 YES INACTIVE                744120

3          1          4 YES ACTIVE                  745576

过段时间,发生自动系统检查点后

SQL> select

2    ts.name "表空间名"

3    , df.file# "文件号"

4    , df.checkpoint_change# "检查点"

5    , df.last_change# "终止检查点"

6    , df.name "文件名"

7    from v$tablespace ts,v$datafile df

8  where ts.ts#=df.ts#

9  order by df.file#;

表空间名                           文件号     检查点 终止检查点 文件名

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

SYSTEM                                  1     747335            /oracle/oradata/boss/system01.dbf

UNDOTBS1                                2     747335            /oracle/oradata/boss/undotbs01.dbf

SYSAUX                                  3     747335            /oracle/oradata/boss/sysaux01.dbf

USERS                                   4     747335            /oracle/oradata/boss/users01.dbf

EXAMPLE                                 5     747335            /oracle/oradata/boss/example01.dbf

TESTTBS01                               6     747335            /oracle/oradata/boss/testtbs01_01.dbf

TESTTBS01                               7     747335            /oracle/oradata/boss/testtbs01_02.dbf

TESTTBS02                               8     747335            /oracle/oradata/boss/testtbs02_01.dbf

TESTTBS03                               9     652799     652799 /oracle/oradata/boss/testtbs03_01.dbf

TESTTBS04                              10     747335            /oracle/oradata/boss/testtbs04_01.dbf

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC

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

1 /oracle/oradata/boss/system01.dbf        ONLINE              747335 NO

2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              747335 NO

3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              747335 NO

4 /oracle/oradata/boss/users01.dbf         ONLINE              747335 NO

5 /oracle/oradata/boss/example01.dbf       ONLINE              747335 NO

6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              747335 NO

7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              747335 NO

8 /oracle/oradata/boss/testtbs02_01.dbf    ONLINE              747335 NO

9 /oracle/oradata/boss/testtbs03_01.dbf    ONLINE              652799

10 /oracle/oradata/boss/testtbs04_01.dbf    ONLINE              747335 NO

10 rows selected.

SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#

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

1375601832 BOSS                                     ARCHIVELOG               747335

SQL> show parameter user_dump

NAME                                 TYPE        VALUE

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

user_dump_dest                       string      /oracle/admin/boss/udump

##获得当前时间 系统scn,如果shutdown abort,恢复的记录为active重做日志到shutdown abort时间点

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

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

746578

3.3、日志切换或检查点:执行检查点后,在重做日志中标记该检查点队列的尾scn之前的scn无需再做恢复

日志切换不会引起4个检查点的改变,只是在下次执行检查点后,将数据文件头scn、数据文件scn、系统scn都更新为high scn。

执行检查点时,将检查点队列上的所有脏数据写入(已提交和未提交的)写入到数据文件,在重做日志中标记该检查点队列的尾scn之前的scn无需再做恢复,最后将数据文件头scn、数据文件scn、系统scn都更新为当前scn。

3.5、数据库正常启动关闭

数据库正常关闭时,系统会执行一个完全检查点动作,用当前scn更新4个scn,将所有数据文件scn置为数据文件头scn(除了offline和read only的数据文件)。

数据库启动时,oracle先比较启动scn和系统scn,如果启动scn>系统scn,控制文件是旧的,如果启动scn<系统scn,数据文件是旧的,如果启动scn=系统scn,再查看终止scn,如果为nul就进行实例恢复

例如:begin backup引起启动scn和数据文件scn的改变,然后shutdown abort,需要恢复也就证明以上过程

3.6、数据库非正常关闭

数据库非正常关闭(实例崩溃)时,终止scn不会被设置,是null。可以数据库启动到mount状态时,进行查询。数据库open过程中,smon进程执行实例恢复工作,即先进行前滚,再把数据库打开,最后回滚。

3.7、数据文件介质故障

启动scn<系统scn

3.8、控制文件介质故障

启动scn>系统scn。noresetlogs重建控制文件时,控制文件的系统scn来自current log头;resetlogs重建控制文件,控制文件的系统scn来自启动scn(感觉不对)。

3.9、备份时的实例崩溃

begin backup时,实例崩溃

SCN系统变更号以及它和恢复的关系,布布扣,bubuko.com

时间: 2024-10-29 08:40:16

SCN系统变更号以及它和恢复的关系的相关文章

系统改变号(SCN)的详解

oracle026 系统改变号(SCN)的详解 SCN 系统改变号,是通过某些函数把时间产生某个数:确保数据文件的一致性,比较先后,新旧: 为什么使用时间产生数字,因为在比较时间的比较慢,而用数字就相对的块点,就像shared pool 比较sql的 使用算出的hash值进行比较. select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) fr

双系统重装win7/Xp后如何恢复ubuntu引导--转载

重装win7后如何恢复ubuntu引导 在重装系统之后,开机启动界面的ubuntu引导不见了,直接进入新安装的window系统中.下面是如何恢复ubuntu引导的方法: 1)准备一张ubuntu系统安装盘: 2)将ubuntu系统安装盘放入光驱,重新启动计算机,进入BIOS,将开机启动设置为光驱(CD/ROM)启动方式: 3)然后保存设置退出,等待片刻就进入到ubuntu的安装界面,此时有两个选择 1.在该光盘上试用ubuntu系统 2.将ubuntu系统安装到计算机上 选择"在该光盘上试用ub

shell脚本,批量创建10个系统帐号并设置密码为随机8位字符串。

[[email protected] wyb]# cat user10.sh #!/bin/bash #批量创建10个系统帐号wangyb01-wangyb10并设置密码(密码为随机8位字符串). >user.list for user in `seq -w 10` do useradd wangyb$user password=`echo $RANDOM|md5sum|cut -c 1-8` echo $password|passwd wangyb$user --stdin echo wang

用FineReport报表系统构建ITIL流程系统变更分析

用FineReport报表系统构建ITIL流程系统变更分析 注:此文为"帆软十年,项册征集"活动的获奖作品. 一.应用背景 随着ITIL的发展和深入,为提高IT服务管理的质量,某银行上线一套符合ITIL的流程工具,其中涉及事件.问题.测试.变更管理等流程,上线后,有效地控制了运营管理中各流程环节的质量,提高了整体效率,为收集和展现电子流程化管理效果,量化考核指标,需提高报表展现效果和报表效率,以前的报表软件对excl支持不够,且图形不能导出,而这正是FineReport报表工具的优势.

批量创建10个系统帐号o01-zkg10并设置密码

批量创建10个系统帐号o01-zkg10并设置密码(密码为随机8位字符串)脚本如下: #!/bin/sh#批量创建用户名和密码#by zkg 2019-08-22. /etc/init.d/functions if [ $UID -ne 0 ];thenecho "create user need root privage"exitfi for user in echo zkg{01..10}docheck_user=grep "\b$user\b" /etc/pa

MacBook Pro/Air 下使用 linux ubuntu 系统 波浪号“~”变成其他 符号 的完美解决办法

打开终端,输入: sudo su - echo 0 > /sys/module/hid_apple/parameters/iso_layout sudo su -需要root权限,所以使用前请注意已下载root,没有root的请输入以下代码: #没有root的请输入以下代码下载root sudo apt-get install root 这时你会发现“~”能打出来了,但是重启系统又会恢复原样,所以我们要在下面 rc.local 文件中添加一行代码: 路径:/etc/rc.local sudo v

某系统数据库的增量备份策略恢复测试过程

上半年,公司服务器虚拟化项目已经上线,所以近期的主要工作重心以P2V(物理机到虚拟机)的迁移为主,作为业务系统核心的后台数据库的迁移更是这项工作的重中之重. 本次数据库的迁移工作主要包含两部分的内容:一是跨平台(windows2003到OEL6)的数据库版本升级(Oracle 9.2.0.6到Oracle 11.2.0.4):二是数据迁移.由于这些变迁,伴随着发生了许多操作方式(习惯)的变化,最显著的一点就是备份方式的变更了.之前的备份方式是采用exp逻辑导出的方式,就目前业务运行的情形来看,此

TFS代码变更和工作项关联,为系统变更提供完美的跟踪轨迹

TFS是微软的应用软件生命周期管理(ALM)的解决方案产品,相比我们常见的一些ALM产品,例如HP ALM, IBM Rational, Atlanssian Jira等,其最大的区别在于TFS将软件研发的详细过程和交付物都集中收集在同一个平台中,实现了软件研发资产的集中管控.同时将软件研发过程中的各种角色, 例如需求分析师.开发人员.测试人员.运维实施人员等集中在一个平台中办公,实现数据的充分共享和互通,大幅提高了企业中不同部门之间的沟通效率. 而在软件研发过程中最重要和最受关注的,非开发人和

服务器挂掉 进入一个基本的shell系统将数据全部cp便于恢复

进入救援模式 : 1 进入bios 选择优盘启动 然后保存退出 选择救援模式 说明系统挂载到到/mnt/sysimage上 continue继续 选择shell 换根  切换到 根文件系统 然后 查看是否有 u盘 vfst是u盘类型 在瓜子u盘前 新加载模块 modprobe vfat mount -t  vfat /dev/sdb /media 然后将 数据cp到  /media/中记住cp完后一定要卸载u盘