oracle scn之基本概念

一、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.csdn.net/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)操作。

 

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值