oracle scn之基本概念

本文深入探讨了Oracle数据库中SCN的作用、查看方法以及在不同状态下SCN的变化,包括正常关库、系统正常关闭(断电模拟)、提交操作后的SCN更新和实例恢复过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、scn的作用

Scn的作用主要是保证数据库的一致性。它是oracle的内部时钟机制。Scn是实施对oracle恢复非常重要的机制。

Scn在数据库中无处不在,一般在控制文件,数据文件头,日志文件,数据文件等都记录scn值。

system scn从视图v$database中获得,对应checkpoint_change#字段;

datafile scnlast scnstop scn)分别对应视图v$datafile中的checkpoint_change#last_change#

start scn则从v$datafile_headercheckpoint_change#得到。

二、查看当前scn

control中有三种SCN分别为:system SCN、datafile SCN、last SCN(stop scn),

System scn

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

451490

Datafile scn

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

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

451490

/opt/app/oracle/oradata/wolf/undotbs01.dbf

451490

/opt/app/oracle/oradata/wolf/sysaux01.dbf

451490

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

451490

Last scnstop scn,正常启动的时候stop scn无穷大, last_change#一定是NULL

SQL> select name,last_change# from v$datafile;

NAME

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

LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

/opt/app/oracle/oradata/wolf/undotbs01.dbf

/opt/app/oracle/oradata/wolf/sysaux01.dbf

NAME

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

LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

数据文件头中有一种SCN :start SCN

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

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

451490

/opt/app/oracle/oradata/wolf/undotbs01.dbf

451490

/opt/app/oracle/oradata/wolf/sysaux01.dbf

451490

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

451490

三、各种状态下scn变化。

1、正常关库(immediate,noraml,translate),四个scn会应执行full checkpoint 而相等。

正常关库时scn应该保持一致,start scn=stop scn

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 285212672 bytes

Fixed Size 1218992 bytes

Variable Size 92276304 bytes

Database Buffers 188743680 bytes

Redo Buffers 2973696 bytes

Database mounted.

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

NAME CHECKPOINT_CHANGE#

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

WOLF 461843

SQL> select name,checkpoint_change#,last_change# from v$datafile;

NAME

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

CHECKPOINT_CHANGE# LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

461843 461843

/opt/app/oracle/oradata/wolf/undotbs01.dbf

461843 461843

/opt/app/oracle/oradata/wolf/sysaux01.dbf

461843 461843

NAME

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

CHECKPOINT_CHANGE# LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

461843 461843

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

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

461843

/opt/app/oracle/oradata/wolf/undotbs01.dbf

461843

/opt/app/oracle/oradata/wolf/sysaux01.dbf

461843

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

461843

2、系统正常关闭

断电(shutdown abort模拟断电)

这个时候last scn依然为无穷大,那么当重新启动实例时,系统首先会比较start scn与system scn,如果一致,那么再比较start scn 与last scn是否一样大,因为是非正常关闭,这里会不一样大,那么就需要恢复。

如果last scn无穷大,则由数据库自己做实例恢复。

如果打开数据库时发现system scn>datafile scn,那么以为着使用旧的备份数据文件,也就是需要介质恢复
如果是system scn<datafile scn,及控制文件scn是旧的,代表使用了老的控制文件,需要recover using backup controlfile进行恢复。

SQL> shutdown abort

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area 285212672 bytes

Fixed Size 1218992 bytes

Variable Size 96470608 bytes

Database Buffers 184549376 bytes

Redo Buffers 2973696 bytes

Database mounted.

SQL> select name,checkpoint_change#,last_change# from v$datafile;

NAME

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

CHECKPOINT_CHANGE# LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

461844

/opt/app/oracle/oradata/wolf/undotbs01.dbf

461844

/opt/app/oracle/oradata/wolf/sysaux01.dbf

461844

NAME

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

CHECKPOINT_CHANGE# LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

461844

这里发现last_change#为无穷大。说明非正常关库。表示Oracleshutdown时没有进行checkpoint,下次开机必须进行crash recovery

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

NAME CHECKPOINT_CHANGE#

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

WOLF 461844

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

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

461844

/opt/app/oracle/oradata/wolf/undotbs01.dbf

461844

/opt/app/oracle/oradata/wolf/sysaux01.dbf

461844

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

461844

SQL> alter database open;

Database altered.

SQL> select * from scott.laolang;

ID

----------

1

2

3

上面的实验是用scott做的,关闭数据库的前,切换了用户(conn),发生了checkpoint,所以值还在

关于提交

http://blog.youkuaiyun.com/yujin2010good/article/details/7713534

SQL> create table wolf1(id number);

Table created.

SQL> insert into wolf1 values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> insert into wolf1 values(2);

1 row created.

SQL> shutdown abort;

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area 285212672 bytes

Fixed Size 1218992 bytes

Variable Size 100664912 bytes

Database Buffers 180355072 bytes

Redo Buffers 2973696 bytes

Database mounted.

SQL> select name,checkpoint_change#,last_change# from v$datafile;

NAME

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

CHECKPOINT_CHANGE# LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

483694

/opt/app/oracle/oradata/wolf/undotbs01.dbf

483694

/opt/app/oracle/oradata/wolf/sysaux01.dbf

483694

NAME

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

CHECKPOINT_CHANGE# LAST_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

483694

SQL>

SQL>

SQL>

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

NAME CHECKPOINT_CHANGE#

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

WOLF 483694

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

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/system01.dbf

483694

/opt/app/oracle/oradata/wolf/undotbs01.dbf

483694

/opt/app/oracle/oradata/wolf/sysaux01.dbf

483694

NAME

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

CHECKPOINT_CHANGE#

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

/opt/app/oracle/oradata/wolf/users01.dbf

483694

SQL> alter database open;

Database altered.

SQL> select * from wolf1;

ID

----------

1

未提交的数据丢失。

SQL>这时发现start scn 与last scn不等,last scn为无穷大,需要实例恢复

这是日志文件内容

[root@test bdump]# pwd

/opt/app/oracle/admin/wolf/bdump

[root@test bdump]# tail -f alert_wolf.log

starting up 1 shared server(s) ...

Sun Jul 8 06:29:32 2012

ALTER DATABASE MOUNT

Sun Jul 8 06:29:36 2012

Setting recovery target incarnation to 2

Sun Jul 8 06:29:36 2012

Successful mount of redo thread 1, with mount id 3753997644

Sun Jul 8 06:29:36 2012

Database mounted in Exclusive Mode

Completed: ALTER DATABASE MOUNT

Sun Jul 8 06:42:49 2012

alter database open

Sun Jul 8 06:42:49 2012

Beginning crash recovery of 1 threads

Sun Jul 8 06:42:49 2012

Started redo scan

Sun Jul 8 06:42:49 2012

Completed redo scan

106 redo blocks read, 34 data blocks need recovery

Sun Jul 8 06:42:49 2012

Started redo application at

Thread 1: logseq 2, block 1779

Sun Jul 8 06:42:49 2012

Recovery of Online Redo Log: Thread 1 Group 1 Seq 2 Reading mem 0

Mem# 0 errs 0: /opt/app/oracle/oradata/wolf/redo01.log

Sun Jul 8 06:42:49 2012

Completed redo application

Sun Jul 8 06:42:49 2012

Completed crash recovery at

Thread 1: logseq 2, block 1885, scn 504788

34 data blocks read, 34 data blocks written, 106 redo blocks read

Sun Jul 8 06:42:49 2012

Thread 1 advanced to log sequence 3

Thread 1 opened at log sequence 3

Current log# 2 seq# 3 mem# 0: /opt/app/oracle/oradata/wolf/redo02.log

Successful open of redo thread 1

Sun Jul 8 06:42:49 2012

MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set

Sun Jul 8 06:42:49 2012

SMON: enabling cache recovery

Sun Jul 8 06:42:49 2012

Successfully onlined Undo Tablespace 1.

Sun Jul 8 06:42:49 2012

SMON: enabling tx recovery

Sun Jul 8 06:42:50 2012

Database Characterset is WE8ISO8859P1

replication_dependency_tracking turned off (no async multimaster replication found)

Starting background process QMNC

QMNC started with pid=16, OS id=20256

Sun Jul 8 06:42:50 2012

db_recovery_file_dest_size of 2048 MB is 0.00% used. This is a

user-specified limit on the amount of space that will be used by this

database for recovery-related files, and does not reflect the amount of

space available in the underlying filesystem or ASM diskgroup.

Sun Jul 8 06:42:51 2012

Completed: alter database open

明显做了一个实例恢复,其实就是一个redorollforward)和undorollback)操作。

欢迎加入:
119224876(db china联盟),233065499(db china联盟),229845401(虚拟化-云计算-物联网)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值