1. scn: system change number

用以标识数据库在某个确切时刻提交的版本.

数据库的内部逻辑时钟.

每个数据库都有一个全局的SCN生成器.

它会随着外部变化的加快而加快变化,在数据文件和控制文件里各存放一个SCN号,然后恢复(主要是介质恢复)的时候它们会进行比对,

一般情况下,这俩个文件里的SCN号是一致的;非正常情况下,要根据实时情况判断这俩个文件里的SCN号的大小

ORACLE通过SCN维护数据库的一致性,

以及实施至关重要的恢复机制.

SCN的获取

(1)select dbms_flashback.get_system_change_number from dual; 9i

(2)select current_scn from v$database; 10g

(3)select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe; before 9i

(4)从内存中获取SCN

sys:

sql>oradebug setmypid

sql>oradebug DUMPvar SGA kcsgscn_

kcslf kcsgscn_ [20009104, 20009124) =

00000000 000704BD 000007D2 00000000 00000000 00000000 00000000 20008F10

sql>select to_number('704BD','xxxxxx') SCN from dual;

select to_number('1078F3','xxxxxx') SCN from dual;

观察scn变化速率

不繁忙时:

select current_scn from v$database;

繁忙时:

set serveroutput on

declare

a number;

begin

for i in 1..100 loop

select current_scn into a from v$database;

dbms_output.put_line(a);

end loop;

end;

/  **执行上面的PL/SQL语句

2. 转储control file和数据文件头信息

控制文件保存的信息:

DB名称,创建时间

所有数据文件和日志文件名称和路径

表空间信息

备份信息

检查点和SCN信息

归档信息

sqlplus sys/oracle as sysdba

SQL> show parameter user_dump_dest

/opt/oracle/admin/LH/udump

quit

cd /opt/oracle/admin/LH/udump

rm *.trc

sqlplus sys/oracle as sysdba

alter session set events

'immediate trace name controlf level 8';

quit

ll lh_ora_17702.trc

vi lh_ora_17702.trc

观察内容

转储数据文件头信息

cd /opt/oracle/admin/LH/udump

rm *.trc

sqlplus sys/oracle as sysdba

alter session set events

'immediate trace name file_hdrs level 10';

quit

vi .trc

每个数据文件头信息都会转储出来

观察内容

转储日志文件

cd /opt/oracle/admin/LH/udump/

rm *.trc

sqlplus sys/oracle as sysdba

alter system dump logfile '/opt/oracle/oradata/lh/redo01.log';

quit

vi  lh_ora_11346.trc

low scn

next scn

标识该日志文件包含这2个值之间的信息

CKPT:

工作:

(1)向DBWR布置写数据文件

(2)更新控制文件,数据文件头信息,记录检查点

触发:

(1)redolog切换

(2)alter system checkpoint;

(3)将tbs->offline,read only,backup

(4)初始化参数

log_checkpoint_interval

log_checkpoint_timeout

3.

v$database.checkpoint_change#      记录最后一次检查点发生控制文件的SCN

(the scn of ckpt in controlfile)

select checkpoint_change# from v$database;

v$datafile_header.checkpoint_change#   记录最后一次检查个个数据文件的SCN

(the scn of every datafile in every datafile)

select checkpoint_change# from v$datafile_header;

v$datafile.checkpoint_change#    记录最后一次检查个个控制文件的SCN

(the scn of every datafile in controlfile)

select checkpoint_change# from v$datafile;

v$datafile.last_change#     (select last_change# from v$datafile;)

每个数据文件的终止scn都存储在controlfile中

在正常的数据库操作过程中,

所有正处于联机读写模式下的数据文件的终止scn都为null.

用以标识数据库或数据文件是否正常关闭

[当数据库是read only open模式,

v$database.current_scn=0]

在安全关闭数据库的过程中,系统会执行一个检查点动作,

这时所有数据文件的终止scn,都会设置成数据文件头中

的那个checkpoint_change#的值。

在数据库重新启动的时候,需要校验

(1)数据文件头部的 checkpoint cnt 与

控制文件中的   checkpoint cnt

是否一致,如不一致,停止往下进行,

如一致,继续校验

(2)数据文件头的SCN对应控制文件的结束SCN是否一致

Oracle将v$datafile_header.checkpoint_change#与v$database.checkpoint_change#进行比较 (介质恢复)

(比较v$datafile_header和v$database的checkpoint_change#)

如果这两个值相互匹配,oracle接下来还要比较v$datafile_header.checkpoint_change#和v$datafile.last_change# (实例恢复)

(比较v$databasefile_header的checkpoint_change#和v$databasefile的last_change#)

**实例恢复是由SMON,自动恢复

*1.如果这两个值也一致,就意味着所有数据块都已经提交,所有对数据库的修改都没有

在关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作,此时数据库就可以打开了。

*2.当所有的数据文件都打开之后,存储在控制文件中的v$datafile.last_change#的值再次被

更改为null,这表示数据文件已经打开并能够正常使用了。

在数据文件打开过程中,

如果v$datafile_header.checkpoint_change#

与v$database.checkpoint_change#不同,需要介质恢复

如果v$datafile_header.checkpoint_change#

和v$datafile.last_change#不同,需要实例恢复

open:

select checkpoint_change# from v$database          622419

select checkpoint_change# from v$datafile          622419

select last_change# from v$datafile                null

select checkpoint_change# from v$datafile_header   622419

(1)正常关闭

ORACLE_SID=LH

sqlplus sys/oracle as sysdba

shutdown immediate              把所有数据文件的终止scn(null),都会设置成数据文件头中的那个checkpoint_change#的值

startup mount

select checkpoint_change# from v$database          623414

select checkpoint_change# from v$datafile          623414

select last_change# from v$datafile                623414

select checkpoint_change# from v$datafile_header   623414

alter database open;

比较v$datafile_header.checkpoint_change#与v$database.checkpoint_change#

比较v$datafile_header.checkpoint_change#和v$datafile.last_change#

select checkpoint_change# from v$database          623415

select checkpoint_change# from v$datafile          623415

select last_change# from v$datafile                null

select checkpoint_change# from v$datafile_header   623415

(2)非正常关闭

在ORACLE打开状态下,断电,直接关机

启动OS

ORACLE_SID=LH

sqlplus sys/oracle as sysdba

startup mount

select checkpoint_change# from v$database          623415

select checkpoint_change# from v$datafile          623415

select last_change# from v$datafile                null

select checkpoint_change# from v$datafile_header   623415

alter database open;

比较v$datafile_header.checkpoint_change#与v$database.checkpoint_change#

比较v$datafile_header.checkpoint_change#和v$datafile.last_change#不同,需要实例恢复

tail -f -n 300 alert_LH.log

SMON: enabling cache recovery

SMON: enabling tx recovery

select checkpoint_change# from v$database          645765

select checkpoint_change# from v$datafile          645765

select last_change# from v$datafile                null

select checkpoint_change# from v$datafile_header   645765

(3)介质恢复(DBA要介入)

open:

ORACLE_SID=LH

sqlplus sys/oracle as sysdba

alter database begin backup;

$ cp tbs16.dbf tbs16.dbf.bak

sqlplus sys/oracle as sysdba

select checkpoint_change# from v$database          517792

select checkpoint_change# from v$datafile          517962

select last_change# from v$datafile                null

select checkpoint_change# from v$datafile_header   517962

alter database end backup;

select checkpoint_change# from v$database          517792

select checkpoint_change# from v$datafile          517962

select last_change# from v$datafile                null

select checkpoint_change# from v$datafile_header   517962

shutdown immediate

$ mv  tbs16.dbf.bak  tbs16.dbf

startup mount

select checkpoint_change# from v$database          518771

select checkpoint_change# from v$datafile          518771

select file#,last_change# from v$datafile          518771

select file#,checkpoint_change# from v$datafile_header 518771   (7)  517962

alter database open;  比较v$datafile_header.checkpoint_change#与v$database.checkpoint_change#不同,需要介质恢复

ORA-01113: file 7 needs media recovery

recover database;

Media recovery complete.

select checkpoint_change# from v$database          518771

select checkpoint_change# from v$datafile          518771

select file#,last_change# from v$datafile          518771 (7) 518770

select file#,checkpoint_change# from v$datafile_header 518771   (7)  518770

alter database open;   比较v$datafile_header.checkpoint_change#和v$datafile.last_change# 不同,需要实例恢复

SMON: enabling cache recovery

SMON: enabling tx recovery

select checkpoint_change# from v$database          518772

select checkpoint_change# from v$datafile          518772

select file#,last_change# from v$datafile          null

select file#,checkpoint_change# from v$datafile_header 518772

sqlplus sys/oracle as sysdba

SQL> oradebug setmypid

sql> oradebug dump controlf 4

$ORACLE_BASE/admin/hj/udump/hj_ora_4198.trc

我们可以看到所有的数据文件Stop scn: 0xffff.ffffffff,这是一个极大的值,说明我们的数据库是打开的。我们知道,shutdown abort的时候,

没有checkpoint,控制文件也不会被更新,当数据库重新启动的时候,Oracle会发现这个SCN仍然是这个极大值,和数据库的Checkpoint SCN不一样,

此时数据库就会进行恢复,只有当这两个SCN一样,数据库才能OPEN。

redo: 已提交,datafile想要,但没有,需要应用redologfile里的redo sql

undo: 未提交,datafile不想要,但有了,需要应用undofile里的undo信息

手动修改oracle scn号,SCN(系统改变号)相关推荐

  1. 获取当前scn号scn1_Oracle 系统改变号SCN详解

    Scn : scn的英文全称就是 system change number, 中文直译过来就是系统改变号了. 1.SCN的定义 scn的英文全称就是 system change number, 中文直 ...

  2. Oracle 系统改变号SCN详解

    这篇文章是参考甲骨论老相老师的教学视频: http://v.youku.com/v_show/id_XNDAyNDIyMDgw.html 所做的学习笔记. 1. SCN的定义 scn的英文全称就是 s ...

  3. oracle最新scn补丁,Oracle 系统改变号(SCN), Headroom, 安全和补丁信息

    适用于: Oracle Database – Enterprise Edition – 版本 10.1.0.5到 11.2.0.3 [Release 10.1 to 11.2] 本文信息适用于任何平台 ...

  4. oracle中scn(系统改变号)

    系统scn:                 select checkpoint_change# from v$database; 文件scn:                 select name ...

  5. 手动修改oracle scn号,使用Oradebug修改Oracle SCN

    Oracle SCN对于数据库运行.维护而言是至关重要的因素.在启动从mount到open过程中,主要是各种文件的SCN进行比较的行为.通常情况下,我们是不需要介入到Oracle SCN的取值和设置, ...

  6. 从配置文件(*.config)读到内存中,手动修改配置文件后,内存中数据改变问题.

    某些情况,我们把数据信息存储在*.xml或*.config文件中,存储在*.config中会比较安全,发布的程序,浏览器不会打开*.config文件,但是*.xml会在浏览器中呈现. 使用.confi ...

  7. 如何手动修改oracle表空间,ORACLE数据库创建和修改表空间

    -建立表空间(oracle中的tablespace(表空间)) CREATE TABLESPACE data01 DATAFILE 'D:\oracle\ora92\oradata\db\DATA01 ...

  8. oracle数据库的scn,Oracle数据库SCN详解

    SCN号概述 SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字.Oracle数据库中一共有4种SCN分别为 系统检查点SCN: 系统检查点SCN位于控制文件中,当检查点进程启 ...

  9. oracle row_scn,【Oracle概念】-SCN是什么

    SCN是什么 SCN查看与转换 ORA_ROWSCN伪列 关于SCN分类 SCN的作用 延伸阅读 SCN是什么 在<Concepts>中是描述SCN的: A system change n ...

最新文章

  1. 某月某日前包括当天吗_创恒国际投资平台介绍股票交易制度:股票是否可以当天买?当天卖?...
  2. vue 心跳监控_【笔记】vue中websocket心跳机制
  3. js数组fill()方法
  4. 乱码问题引申 python 中string和unicode
  5. DCMTK:解压缩RLE压缩的DICOM文件
  6. php中ci的session自动加载报错
  7. 前端学习(2250)拉取代码文件
  8. java mysql geo_GEO数据库简介
  9. 2017 开源软件排行_2017年政府和公民如何使用开源解决人类问题
  10. 【BZOJ3942】Censoring [KMP]
  11. Linux系统(三)vi、vim编辑器和shell编程
  12. ENVI软件中决策树分类和监督分类算法比较
  13. 乱码问题及字符编码集(一)
  14. java word 题目导入_Java导入导出Excel和Word
  15. 怎么把raw转换成jpg格式?推荐两个raw转jpg的方法
  16. WinRAR 6.0 sc 去广告版
  17. 计算机均价的公式,【转】二手笔记本电脑的价格计算方法和举例
  18. MOS管和三极管区别-对比很显然
  19. 【服务通信自定义srv调用3----客户端的优化】
  20. Apollo 5.5 源码学习笔记(五) | transform模块 | Apollo中的坐标系统详解

热门文章

  1. PIX配置手册三(nat)
  2. linux 新建用户(添加ssh用户两者方式一样)
  3. mybatis开发dao的方法——(三)
  4. (基础篇)PHP字符串函数
  5. IIS7.5+WebConfig实现页面伪静态和301重定向
  6. 谷歌地图控件,通过扩展实现GMAP的自定义绘图系统
  7. centos装oracle6,CentOS-6.7下安装Oracle11g
  8. python通信测试_Python接口测试实战1(上)- 接口测试理论
  9. iphone个系列尺寸_iPhone 12系列、11系列尺寸对比
  10. html 表格过滤功能,简单的带排序和过滤功能的jQuery表格插件