SCN学习初解_转载
2013-07-17 16:25
155 查看
SCN的意义?system change number
SCN其实就是时间 通过函数转换成数字
select dbms_flashback.get_system_change_number,
SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;
每个日志文件头部有2个SCN:frist scn 、next scn 记录的当前日志文件的scn号的范围。
select * from v$log;
三种状态:active inactive current
日志文件active状态表示有脏块还未写入。不能被覆盖。
2、常见的SCN
控制文件
系统SCN(关闭数据库的时候更新)
select checkpoint_change# from v$database;
文件SCN(日志文件active状态改变的时候更新)
select name,checkpoint_change# from v$datafile;
结束SCN
select name,last_change# from v$datafile;
同时在数据文件的头部还存在一个开始scn号
开始SCN
select name,checkpoint_change# from v$datafile_header;
一般情况下 系统SCN、 文件SCN、开始scn号是一致的
oracle实例恢复的时候只需要redolog
检查点信息
增量检查点并不会去更新数据文件头,以及控制文件中数据库SCN以及数据文件条目的SCN信息,
而只是每3秒由CKPT进程去更新控制文件中的low cache rba信息,也就是检查点的位置。并且记录checkpoint发生的时间点,
从控制文件记录的scn跑到redolog的current的scn
col LowRBA for a20
[b]col OndiskRBA for a20
[/b]
select CPDRT,CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "LowRBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "OndiskRBA",
CPODS,CPODT,CPHBT from x$kcccp;
CPDRT LowRBA OndiskRBA CPODS CPODT CPHBT
---------- -------------------- -------------------- ---------------- -------------------- ----------
40 15.75155.0 15.75250.0 2412258 07/25/2013 06:51:09 821622757
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
8 rows selected.
CPDRT列是检查点队列中的脏块数目.
CPODS列是on disk rba的scn
CPODT列是on disk rba的时间戳
CPHBT列是心跳
数据文件头部
开始SCN
select name,checkpoint_change# from v$datafile_header;
数据块头部ITL事务槽
日志change vector中
跑日志(提升数据文件SCN)、空跑日志(数据块的scn号比日志文件的scn号大)
回滚段事务表中
日志文件头部
firstscn、nextscn==记录的日志范围
select recid,sequence#,first_change#,next_change# from v$log_history where rownum<6;
select * from v$log;
select * from v$archived_log
3、实例恢复
只是需要redo log:active、current
实例恢复判断依据
演示SCN变化
如果发生了实例崩溃,只需要在日志文件中找到检查点位置(low cache rba),
从此处开始应用所有的重做日志文件,就完成了前滚操作。
实例崩溃后,再次启动数据库,oracle会到控制文件中读取low cache rba,这就是检查点位置。
从此处开始应用重做日志,应用到on disk rba的位置。
on disk rba是磁盘中重做日志文件的最后一条重做记录的rba。
4、
SQL> show parameter fast_start_mttr_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fast_start_mttr_target integer 0
SQL>
实例恢复的时候需要日志。前滚的时间取决了跑日志的时间。fast_start_mttr_target(单位秒)表示前滚时间的控制(通过加大dbwr写频率)
相关操作
select checkpoint_change# from v$database
alter system checkpoint
alter system switch logfile
select name,checkpoint_change# from v$datafile
select name,checkpoint_change# from v$datafile_header
select * from v$log;
begin
for i in 1..10000 loop
insert into t2 values(1,'xkj');
commit;
end loop;
end;
select * from t2
alter system flush buffer_cache
SCN其实就是时间 通过函数转换成数字
select dbms_flashback.get_system_change_number,
SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;
每个日志文件头部有2个SCN:frist scn 、next scn 记录的当前日志文件的scn号的范围。
select * from v$log;
三种状态:active inactive current
日志文件active状态表示有脏块还未写入。不能被覆盖。
2、常见的SCN
控制文件
系统SCN(关闭数据库的时候更新)
select checkpoint_change# from v$database;
文件SCN(日志文件active状态改变的时候更新)
select name,checkpoint_change# from v$datafile;
结束SCN
select name,last_change# from v$datafile;
同时在数据文件的头部还存在一个开始scn号
开始SCN
select name,checkpoint_change# from v$datafile_header;
一般情况下 系统SCN、 文件SCN、开始scn号是一致的
oracle实例恢复的时候只需要redolog
检查点信息
增量检查点并不会去更新数据文件头,以及控制文件中数据库SCN以及数据文件条目的SCN信息,
而只是每3秒由CKPT进程去更新控制文件中的low cache rba信息,也就是检查点的位置。并且记录checkpoint发生的时间点,
从控制文件记录的scn跑到redolog的current的scn
col LowRBA for a20
[b]col OndiskRBA for a20
[/b]
select CPDRT,CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "LowRBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "OndiskRBA",
CPODS,CPODT,CPHBT from x$kcccp;
CPDRT LowRBA OndiskRBA CPODS CPODT CPHBT
---------- -------------------- -------------------- ---------------- -------------------- ----------
40 15.75155.0 15.75250.0 2412258 07/25/2013 06:51:09 821622757
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
0 0.0.0 0.0.0 0 0
8 rows selected.
CPDRT列是检查点队列中的脏块数目.
CPODS列是on disk rba的scn
CPODT列是on disk rba的时间戳
CPHBT列是心跳
数据文件头部
开始SCN
select name,checkpoint_change# from v$datafile_header;
数据块头部ITL事务槽
日志change vector中
跑日志(提升数据文件SCN)、空跑日志(数据块的scn号比日志文件的scn号大)
回滚段事务表中
日志文件头部
firstscn、nextscn==记录的日志范围
select recid,sequence#,first_change#,next_change# from v$log_history where rownum<6;
select * from v$log;
select * from v$archived_log
3、实例恢复
只是需要redo log:active、current
实例恢复判断依据
演示SCN变化
如果发生了实例崩溃,只需要在日志文件中找到检查点位置(low cache rba),
从此处开始应用所有的重做日志文件,就完成了前滚操作。
实例崩溃后,再次启动数据库,oracle会到控制文件中读取low cache rba,这就是检查点位置。
从此处开始应用重做日志,应用到on disk rba的位置。
on disk rba是磁盘中重做日志文件的最后一条重做记录的rba。
4、
SQL> show parameter fast_start_mttr_target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fast_start_mttr_target integer 0
SQL>
实例恢复的时候需要日志。前滚的时间取决了跑日志的时间。fast_start_mttr_target(单位秒)表示前滚时间的控制(通过加大dbwr写频率)
相关操作
select checkpoint_change# from v$database
alter system checkpoint
alter system switch logfile
select name,checkpoint_change# from v$datafile
select name,checkpoint_change# from v$datafile_header
select * from v$log;
begin
for i in 1..10000 loop
insert into t2 values(1,'xkj');
commit;
end loop;
end;
select * from t2
alter system flush buffer_cache
相关文章推荐
- SCN学习初解_转载
- 写给Linux内核新手-关于Linux内核学习的误区(转载)
- 转载!!:网络协议学习导图
- Python Twisted 学习系列9(转载stulife最棒的Twisted入门教程)
- 【经典转载】Linux进程学习系列之一 基本概念
- [转载]从零开始学习OpenGL ES之一 – 基本概念
- .NET学习步骤(转载)
- 转载-3分钟了解入门「机器学习」该学习什么?(上)
- C++学习 转载
- [乐意黎转载]学习JavaScript你必须掌握的8大知识点!
- [技术学习]博客客户端介绍(转载)
- SQL Server 2005中的T-SQL增强 转载:WWW.CHINAHTML.COM 学习
- [转载]Python学习笔记三(常用模块)
- DirectShow 学习(三) CBaseFilter类源代码解析(转载)
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础(转载)
- JDBC Batch 学习资料--转载
- SQL Server 2000中 IDENTITY_INSERT的设置学习(转载自blacksource的专栏)
- 设计模式学习日志十:命令模式(原文转载)
- 快速高效学习Java编程在线资源Top 20(转载)
- Oracle分页存储过程及Package学习(转载)