设为首页 加入收藏

TOP

系统改变号(SCN)的详解(一)
2015-07-24 12:13:52 来源: 作者: 【 】 浏览:526
Tags:系统 改变 SCN 详解
oracle026
系统改变号(SCN)的详解 SCN 系统改变号,是通过某些函数把时间产生某个数;确保数据文件的一致性,比较先后,新旧;
为什么使用时间产生数字,因为在比较时间的比较慢,而用数字就相对的块点,就像shared pool 比较sql的
使用算出的hash值进行比较。

select dbms_flashback.get_system_change_number,
SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;

//获取当前时间的SCN的值,dual是一张临时表类似于MYSQL的temp表的用处。
1153633 22-12月-14 03.04.02.000000000 上午



控制文件中有三个SCN:开始SCN 结束SCN 和文件SCN

文件SCN是针对于每个数据文件产生的文件SCN号
文件SCN是针对于每个数据文件产生的结束SCN号

在每个数据文件前有一个开始SCN

数据库正常的时候结束SCN时NULL的 ,而文件的开始SCN、文件SCN、和系统SCN号是相同的
数据库关闭的时候,系统、文件、结束、开始都是一样的,
当非正常关闭,结束SCN为空,由于没有及时保存信息;当下一次数据开启的时候。就会
检查到数据时非正常关闭,就会做数据实例的恢复工作:需要redo log部分日志、控制文件LRBA、HRBA、ON DISK RBA

当我们把数据文件换了旧的文件,当系统检测到了旧文件的开始SCN和和结束SCN不一样就需要进行数据恢复做:
跑日志:把SCN跑成新的
提升SCN

查看几个SCN:
select checkpoint_change# from v$database; //系统SCN,存在于每个控制文件
1148314
select name,checkpoint_change# from v$datafile;//文件SCN,存在于每个控制文件
/u01/app/oracle/oradata/jiagulun/system01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/sysaux01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/undotbs01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/users01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/example01.dbf 1148314

select name,last_change# from v$datafile;//结束SCN,存在于每个控制文件
/u01/app/oracle/oradata/jiagulun/system01.dbf
/u01/app/oracle/oradata/jiagulun/sysaux01.dbf
/u01/app/oracle/oradata/jiagulun/undotbs01.dbf
/u01/app/oracle/oradata/jiagulun/users01.dbf
/u01/app/oracle/oradata/jiagulun/example01.dbf

select name ,checkpoint_change# from v$datafile_header//文件头SCN,存在于每个数据文件的头部
/u01/app/oracle/oradata/jiagulun/system01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/sysaux01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/undotbs01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/users01.dbf 1148314
/u01/app/oracle/oradata/jiagulun/example01.dbf 1148314

redo日志文件有一个first SCN 和一个next SCN
first、next 是这个文件中日志记录的范围
每个日志的条目都有一个SCN;可以把frist SCN号当做这个文件第一条记录的SCN号,把next SCN号当做下一个文件日志中记录的开始SCN号
select * from v$log;
名称 空值 类型
------------- -- ------------
GROUP# NUMBER //日志组
THREAD# NUMBER
SEQUENCE# NUMBER //唯一标识
BYTES NUMBER
BLOCKSIZE NUMBER
MEMBERS NUMBER
ARCHIVED VARCHAR2(3)
STATUS VARCHAR2(16) //状态:active,inactive,current
FIRST_CHANGE# NUMBER //first SCN,而下一个日志的开始就是上一个日志的next SCN (在10g的时候是这么认为的)
FIRST_TIME DATE
NEXT_CHANGE# NUMBER //next SCN(10g不一样)
NEXT_TIME DATE

1 1 10 52428800 512 1 NO INACTIVE 1108520 21-12月-14 1148313 22-12月-14
2 1 11 52428800 512 1 NO CURRENT 1148313 22-12月-14 281474976710655
3 1 9 52428800 512 1 NO INACTIVE 1087024 21-12月-14 1108520 21-12月-14


做一个实验:
1. select * from v$log;

1 1 10 52428800 512 1 NO INACTIVE 1108520 21-12月-14 1148313 22-12月-14
2 1 11 52428800 512 1 NO ACTIVE 1148313 22-12月-14 1156305 22-12月-14
3 1 12 52428800 512 1 NO CURRENT 1156305 22-12月-14 281474976710655

2. alter system switch logfile;
3. alter system switch logfile;
4. select * from v$log;

1 1 13 52428800 512 1 NO ACTIVE 1157154 22-12月-14 1157173 22-12月-14
2 1 14 52428800 512 1 NO CURRENT 1157173 22-12月-14 281474976710655
3 1 12 52428800 512 1 NO ACTIVE 1156305 22-12月-14 1157154 22-12月-14
5. select name , last_change# from v$datafile;

/u01/app/oracle/oradata/jiagulun/system01.dbf 1157173
/u01/app/oracle/oradata/jiagulun/sysaux01.dbf 1157173
/u01/app/oracle/oradata
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇业务系统压力测试前,需要Oracled.. 下一篇16.二叉排序树

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: