Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527347
  • 博文数量: 128
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 1345
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-22 21:43
文章分类

全部博文(128)

文章存档

2009年(30)

2008年(98)

我的朋友

分类: Oracle

2008-10-11 22:06:01

1. 重做线程
重做线程由一组相关的重做日志组成。对于单例程数据库系统来说,只有一个重做线程,对于RAC来说,多个例程会同时访问数据库,
并且每个例程都有独立的重做线程。

通过查询v$thread可以显示重做线程的详细信息。
select thread#, status, groups, sequence# from v$thread;

3 SCN(System Change Number)
SCN是用于标识数据库变化的惟一标识号,其数值顺序递增。当执行事务操作(DDL或DML)时,系统会为每个事务变化生成相应的SCN。
OS备份与恢复、RMAIN备份与恢复都是基于SCN值来进行的。

当备份数据文件时,备份文件会记录备份点的SCN值;当数据文件出现介质失败时控制文件会记录失败点的SCN值。
当执行完全恢复操作时,Oracle会从备份点的SCN值开始应用重做数据,一直应用于失败点的SCN值,从而确保数据文件不会丢失任何数据。
当执行不完全恢复操作时,Oracle会从备份点的SCN值开始应用重做数据,并且只会应用于备份点与失败点之间的某个SCN值,因此在该SC值之后的数据会被丢失。

通过查询v$database,可以显示当前SCN值
10g :
select current_scn from v$database;
9i :
select dbms_flashback.get_system_change_number from dual;
9i之前:
select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;


4 日志切换
alter system switch logfile;

5 日志序列号
日志序列号是重做日志的使用标识号,其数值也是顺序递增的。当进行日志切换时,日志序列号会自动增一,并将该信息写入到控制文件。
当执行日志切换时,Oracle会将特定日志序列号所记载的SCN值范围记载到日志历史记录中。当执行完全恢复或不完全恢复时,备份数据文件需要应用重做信息,
而重做信息被记载到归档日志和重做日志中。通过比较备份数据文件的SCN值和日志历史记录的SCN值范围,Oracle可以确定要应用的归档日志和重做日志。
v$log_history可以显示特定重做线程的日志历史记录。
select sequence#, first_change#, next_change# from v$log_history where thread# = 1;

sequence#用于标识日志序列号,first_change#用于标识特定日志序列号的起始SCN值,next_change#用于标识下一个日志序列号的起始SCN值。

6 检查点
检查点是一个数据库事件,它用于同步数据库的所有数据文件、控制文件和重做日志。当发出检查点时,后台进程CKPT会将检查点时刻的SCN写入到控制文件和数据文件头部,同时会促使后台进程DBWR将所有脏缓冲区数据写入到数据文件中。
当Oracle发出检查点时,CKPT会促使DBWR工作,而DBWR又会促使LGWR开始工作。因为当发出检查点时 CKPT、DBWR、LGWR同时工作,所有数据文件、控制文件和重做日志的SCN完全一致,从而使得三种数据库文件保持完全同步。
在以下情况CKPT会发出检查点:
● 日志切换
● 关闭数据库
● 手工检查点
● 通过设置初始化参数FAST_START_MTTR_TARGET控制检查点,该初始化参数用于指定例程恢复的最大时间

阅读(1111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~