当前位置:  数据库>oracle

Oracle scn介绍

    来源: 互联网  发布时间:2017-05-06

    本文导语: 上次做了下基于scn恢复delete掉的数据后,觉得应该好好理解下scn的知识,今天在网上找了下相关的介绍,参考了某些文章,在此我通过实验总结一下。 SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。当一笔交...

上次做了下基于scn恢复delete掉的数据后,觉得应该好好理解下scn的知识,今天在网上找了下相关的介绍,参考了某些文章,在此我通过实验总结一下。

SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。当一笔交易commit 时,LGWR会将log buffer写入redo log file,同时也会将该笔交易的SCN同步写入到redo log file内(wait-until-completed)。因此当你commit transaction时,在交易成功的讯息返回之前,LGWR必须先完整的完成上述行为之后,否则你是看不到提交成功的回应讯息。
那系统是如何产生一个最新的
select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback
  2  .get_system_change_number) from dual;


GET_SYSTEM_CHANGE_NUMBER
------------------------
SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)
---------------------------------------------------------------------------
           117947354
24-MAR-11 11.32.22.000000000 AM





也可以用函数


SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;
control中有三种SCN分别为,system SCN、datafile SCN、last SCN,数据文件头中有一种SCN start SCN
system scn从视图v$database中获得,对应checkpoint_change#字段,datafile scn、last scn分别对应视图v$datafile中的checkpoint_change#,last_change#,而 start scn则从v$datafile_header中checkpoint_change#得到。
数据库在正常启动后下,system scn,datafile scn,start scn会相等,而last scn会被置于无穷大,这里为null。
正常关闭后(immediate,noraml,translate),上面四个scn会应执行full checkpoint 而相等。
当系统在非正常关闭后,如shutdown abort,这个时候last scn依然为无穷大,那么当重新启动实例时,系统首先会比较start scn与system scn,如果一致,那么再比较start scn 与last scan是否一样大,因为是非正常关闭,这里会不一样大,那么就需要例程恢复。
如果打开数据库时发现system scn>datafile scn,那么以为着使用旧的备份数据文件,也就是需要介质恢复
如果是system scn SELECT checkpoint_change# FROM v$database;









CHECKPOINT_CHANGE#
------------------
     117866282

SQL> SELECT file#, checkpoint_change# FROM v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
     1        117866282
     2        117866282
     3        117866282
     4        117866282
     5        117866282
     6        117866282
     7        117866282
     8        117866282
     9        117866282
    10        117866282
    11        117866282











     FILE# CHECKPOINT_CHANGE#
---------- ------------------
    12        117866282
    13        117866282
    14        117866282



14 rows selected.

SQL> SELECT file#, checkpoint_change#, last_change# FROM v$datafile;

     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
     1        117866282
     2        117866282
     3        117866282
     4        117866282
     5        117866282
     6        117866282
     7        117866282
     8        117866282
     9        117866282
    10        117866282
    11        117866282











     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
    12        117866282
    13        117866282
    14        117866282



14 rows selected.
2、正常关闭后,然后在startup mount;
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.






Total System Global Area  835104768 bytes
Fixed Size            2217952 bytes
Variable Size          624953376 bytes
Database Buffers      201326592 bytes
Redo Buffers            6606848 bytes
Database mounted.
SQL> SELECT file#, checkpoint_change# FROM v$datafile_header;





     FILE# CHECKPOINT_CHANGE#
---------- ------------------
     1        117925094
     2        117925094
     3        117925094
     4        117925094
     5        117925094
     6        117925094
     7        117925094
     8        117925094
     9        117925094
    10        117925094
    11        117925094











     FILE# CHECKPOINT_CHANGE#
---------- ------------------
    12        117925094
    13        117925094
    14        117925094



14 rows selected.

SQL> SELECT checkpoint_change# FROM v$database;

CHECKPOINT_CHANGE#
------------------
     117925094

SQL> SELECT file#, checkpoint_change#, last_change# FROM v$datafile;

     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
     1        117925094     117925094
     2        117925094     117925094
     3        117925094     117925094
     4        117925094     117925094
     5        117925094     117925094
     6        117925094     117925094
     7        117925094     117925094
     8        117925094     117925094
     9        117925094     117925094
    10        117925094     117925094
    11        117925094     117925094











     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
    12        117925094     117925094
    13        117925094     117925094
    14        117925094     117925094



14 rows selected.
--发现start scn=last scn,证明系统是正常关闭
SQL> alter database open;

Database altered.
3、在正常打开状态下进行事务操作
SQL> CREATE TABLE w(a number);

Table created.

SQL> INSERT INTO w VALUES(1);

1 row created.

SQL> commit;

Commit complete.

SQL> INSERT INTO w VALUES(2);

1 row created.
4、非正常关闭
SQL> shutdown abort;
ORACLE instance shut down.
5、打开到mount状态下,观看scn
SQL> startup mount;
ORACLE instance started.





Total System Global Area  835104768 bytes
Fixed Size            2217952 bytes
Variable Size          624953376 bytes
Database Buffers      201326592 bytes
Redo Buffers            6606848 bytes
Database mounted.
SQL> SELECT file#,checkpoint_change#, last_change# FROM v$datafile;





     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
     1        117925097
     2        117925097
     3        117925097
     4        117925097
     5        117925097
     6        117925097
     7        117925097
     8        117925097
     9        117925097
    10        117925097
    11        117925097











     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
    12        117925097
    13        117925097
    14        117925097



14 rows selected.

SQL> SELECT checkpoint_change# FROM v$database;

CHECKPOINT_CHANGE#
------------------
     117925097

SQL> SELECT file#,checkpoint_chnge# FROM v$datafile_header;
SELECT file#,checkpoint_chnge# FROM v$datafile_header
             *
ERROR at line 1:
ORA-00904: "CHECKPOINT_CHNGE#": invalid identifier




SQL> SELECT file#, checkpoint_change# FROM v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
     1        117925097
     2        117925097
     3        117925097
     4        117925097
     5        117925097
     6        117925097
     7        117925097
     8        117925097
     9        117925097
    10        117925097
    11        117925097











     FILE# CHECKPOINT_CHANGE#
---------- ------------------
    12        117925097
    13        117925097
    14        117925097



14 rows selected.
--这时发现start scn 与last scn不等,last scn为无穷大,需要例程恢复
6、改变数据库状态为open,并查看该阶段运行日志
SQL> ALTER DATABASE open;


Database altered.

SQL> SELECT * FROM w;

     A
----------
     1
--发现没有提交的事务丢失。
查看日志如下:
Thu Mar 24 10:47:24 2011
ALTER DATABASE   MOUNT
Successful mount of redo thread 1, with mount id 1274403260
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Thu Mar 24 10:50:12 2011
ALTER DATABASE open
Beginning crash recovery of 1 threads   --会自动判断是否需要恢复,这里开始例程恢复
 parallel recovery started with 2 processes
Started redo scan
Completed redo scan
 read 162 KB redo, 112 data blocks need recovery
Started redo application at
 Thread 1: logseq 2635, block 491121
Recovery of Online Redo Log: Thread 1 Group 1 Seq 2635 Reading mem 0   --恢复用的在线重做日志
  Mem# 0: /u01/oradata/orcl/redo01a.log
  Mem# 1: /u01/oradata/orcl/redo01b.log
Completed redo application of 0.13MB
Completed crash recovery at                             --恢复完成
 Thread 1: logseq 2635, block 491446, scn 117945330
 112 data blocks read, 112 data blocks written, 162 redo k-bytes read
Thu Mar 24 10:50:13 2011
LGWR: STARTING ARCH PROCESSES
Thu Mar 24 10:50:13 2011
ARC0 started with pid=22, OS id=31059
ARC0: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC0: STARTING ARCH PROCESSES
Thu Mar 24 10:50:14 2011
ARC1 started with pid=23, OS id=31061
Thread 1 advanced to log sequence 2636 (thread open)
Thu Mar 24 10:50:15 2011
ARC2 started with pid=24, OS id=31063
Thread 1 opened at log sequence 2636
  Current log# 2 seq# 2636 mem# 0: /u01/oradata/orcl/redo02a.log








































    
 
 

您可能感兴趣的文章:

  • Oracle 12c发布简单介绍及官方下载地址
  • Oracle 系统变量函数介绍
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle中SQL语句连接字符串的符号使用介绍
  • Oracle 10g和Oracle 11g网格技术介绍
  • oracle 数据泵导入导出介绍
  • oracle iis7站长之家
  • Oracle解锁的方式介绍
  • Oracle 12c的九大最新技术特性介绍
  • 占用一下,小弟想到深圳发展,有一年JAVA开发经验,熟悉oracle数据库,哪位在深圳的兄弟帮忙介绍个工作,我的QQ:9182647,谢谢了!
  • oracle中UPDATE nowait 的使用方法介绍
  • oracle 创建表空间详细介绍
  • 哪位大哥能介绍一下在redhat7.2下安装oracle9i的过程和细节问题,只要有用,小弟另有送分
  • Oracle中PL/SQL中if语句的写法介绍
  • oracle 重置sys密码的方法介绍
  • Oracle中存取控制介绍
  • oracle中截断表的使用介绍
  • oracle异常(预定义异常,自定义异常)应用介绍
  • oracle sequence语句重置方介绍
  • oracle表空间中空表统计方法示例介绍
  • Oracle round()函数与trunc()函数区别介绍
  • oracle SCN跟TIMESTAMP之间转换
  • Oracle10g中的current_scn是怎样计算的
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle 11g最新版官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Oracle EBS R12 支持 Oracle Database 11g
  • ORACLE日期相关操作
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • ORACLE中DBMS_RANDOM随机数生成包
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • Linux系统下Oracle的启动与Oracle监听的启动
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • 网间Oracle的连接,远程连接Oracle服务器??
  • 请教:.profile中:if [ -d /opt/oracle/db01/app/oracle/product/9.2.0 ]是什么意思?
  • 在linux 中如何删除oracle db 与卸载oracle.
  • linux下安装oracle后使用命令行启动的方法 linux启动oracle


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,