oracle数据库SCN

四种SCN

Oracle数据库中有四SCN分别为系统检查点SCN、数据文件SCN、数据文件头SCN、结束SCN。数据文件头SCN存数在数据文件头中,而其他SCN存储在控制文件中。

系统检查点SCN可通过如下语句:

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

            632913

 数据文件SCN查看:

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

        FILE# CHECKPOINT_CHANGE#

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

         1             632913

         2             632913

         3             632913

         4             632913

 

结束SCN查看:

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

     FILE# LAST_CHANGE#

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

         1

         2

         3

         4

 

数据文件头SCN查看:

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

     FILE# CHECKPOINT_CHANGE#

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

         1             632913

         2             632913

         3             632913

         4             632913

 

实时的数据库SCN查看:

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

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

                  635909

 

上面查看了五种SCN信息,其中最后一项的SCN是数据库闪回时经常用到的,它其实是数据库的系统检查点SCN的实时值,当使用select checkpoint_change# from v$database;语句查询时查出的是上次检查点事件发生时刷新的SCN。

查询系统检查点SCN,两者相差是比较大的。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

            632913

 

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

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

                  636826

执行检查点事件后,两个值几乎相等。所以闪回数据库会使用第二种查询方法以准确的恢复到想要的SCN。

SQL> alter system checkpoint;

System altered.

 

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

            636835

 

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

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

                  636839

 

从上可以看到LAST_CHANGE值为空,说明数据库处于开启状态。而当数据库一致性关闭后,系统会将四种SCN制成统一。如果数据库非一致性关闭则LAST_CHANGE值则仍为空。

从实验看出数据库一致性关闭后,四种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                  1273252 bytes

Variable Size              96469596 bytes

Database Buffers          180355072 bytes

Redo Buffers                7114752 bytes

Database mounted.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

            666440

 

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

     FILE# CHECKPOINT_CHANGE#

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

         1             666440

         2             666440

         3             666440

         4             666440

 

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

     FILE# LAST_CHANGE#

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

         1       666440

         2       666440

         3       666440

         4       666440

 

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

     FILE# CHECKPOINT_CHANGE#

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

         1             666440

         2             666440

         3             666440

         4             666440

数据库非一致性关闭后LAST_CHANGE值仍为空。

SQL> shutdown abort

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  285212672 bytes

Fixed Size                  1273252 bytes

Variable Size              96469596 bytes

Database Buffers          180355072 bytes

Redo Buffers                7114752 bytes

Database mounted.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

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

            666443

 

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

     FILE# CHECKPOINT_CHANGE#

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

         1             666443

         2             666443

         3             666443

         4             666443

 

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

     FILE# LAST_CHANGE#

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

         1

         2

         3

         4

 

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

     FILE# CHECKPOINT_CHANGE#

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

         1             666443

         2             666443

         3             666443

         4             666443

 

数据库SCN原理:

数据库重新启动时,系统会对SCN进行两次比较。第一次是比较数据文件头中的启动SCN与数据文件SCN,如果两个值匹配,说明数据文件不需要介质恢复。接下来比较数据文件头SCN与数据文件结束SCN,如果数值匹配,说明在数据库关闭时所有数据块已提交,数据库不需要恢复,正常开启。当数据库开启后,数据文件结束SCN再次被置为空。当数据文件被设置为只读或使用begin backup命令时该数据文件SCN将被冻结,直到被设置为正常状态。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29385747/viewspace-1063336/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29385747/viewspace-1063336/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值