热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

一、SCN基础1、什么是scn?在oracle数据库中保证数据一致性的方法就是事务。事务是一个逻辑的、原子性的作业单元,通常由一个或多个sql组成,一个事务中的所有sql操作,要么失败全部回滚,要么成功全部提交。数据库的事务最主要的作用就是保证了数据的一致

一、SCN基础 1、什么是scn? 在oracle数据库中保证数据一致性的方法就是事务。事务是一个逻辑的、原子性的作业单元,通常由一个或多个sql组成,一个事务中的所有sql操作,要么失败全部回滚,要么成功全部提交。数据库的事务最主要的作用就是保证了数据的一致

一、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时,实例崩溃


推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文介绍了如何使用 PostgreSQL 的 `UPDATE ... FROM` 语法,通过映射表实现对多行记录进行高效的批量更新。这种方法不仅适用于单列更新,还支持多列的同时更新。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何使用ActionScript 3.0 (AS3) 连接并操作MySQL数据库。通过具体的代码示例和步骤说明,帮助开发者理解并实现这一过程。 ... [详细]
  • 在即将迎来26岁生日之际,作者的人生陷入了低谷。经过近三年的硕士学习后,最终决定退学,并且面临没有工作经验的困境。尽管如此,作者依然坚定地选择为自己的人生负责。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了美国最具影响力的十大财团,包括洛克菲勒、摩根、花旗银行等。这些财团在历史发展过程中逐渐形成,并对美国的经济、政治和社会产生深远影响。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 在网页开发中,页面加载速度是一个关键的用户体验因素。为了提升加载效率,避免在PageLoad事件中进行大量数据绑定操作,可以采用异步加载和特定控件来优化页面加载过程。 ... [详细]
author-avatar
胡敏qiang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有