导航

2.1.4 基本概念

Posted on 2008-09-02 09:47  毅无涯  阅读(246)  评论(0编辑  收藏  举报

1,重做线程(Redo Thread)

重做线程是由一组相关的重做日志组成。

重做线程与实例是一一对应关系。单例程DB只有一个重做线程;RAC 有多个重做线程。

通过查询动态性能视图V$THREAD 可以显示重做线程的详细信息。

SQL> select thread#, status, groups, sequence# from v$thread;

   THREAD# STATUS     GROUPS  SEQUENCE#
---------- ------ ---------- ----------
         1 OPEN            3          5

 

2,重做入口(Redo Entry)

重做入口也被称为重做记录(redo record)或重做数据( redo data),它由一组变化向量组成,这些变化向量包括表块变化(块位置、变化数据)、UNDO 块变化和UNDO 事务表的变化。当用户执行事务操作时(DDL 和 DML )时,服务器进程会将重做记录写入到重做日志缓冲区,并最终由后台进程LGWR 将重做记录写入到重做日志。

 

3,SCN(System Change Number)

SCN 是用于标识数据库变化的唯一标识号,其数值顺序递增。

当执行事务操作时,系统会为每个事务变化生成相应的SCN。

可以通过查询动态性能视图V$DATABASE ,可以显示当前SCN 值。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     659539

 

4,日志切换

日志切换是指后台进程LGWR 停止写一个日志组,并开始写另一个日志组的事件,日志切换包括自动日志切换和手工日志切换两种方式。

手工日志切换:

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          8   52428800          1 NO  CURRENT                 667657 01-9月 -08
         2          1          6   52428800          1 NO  INACTIVE                667530 01-9月 -08
         3          1          7   52428800          1 NO  INACTIVE                667532 01-9月 -08

SQL> alter system switch logfile;

系统已更改。

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          8   52428800          1 NO  ACTIVE                  667657 01-9月 -08
         2          1          9   52428800          1 NO  CURRENT                 668025 01-9月 -08
         3          1          7   52428800          1 NO  INACTIVE                667532 01-9月 -08

 

5,日志序列号

日志序列号是重做日志的使用标识号,其数据是顺序递增的。当进行日志切换时,日志序列号会自动增一,并将该信息写入到控制文件中。

当执行日志切换时,ORACLE 会将特定日志序列号所记载的SCN 值范围记载到日志历史记录中。当执行完全恢复或不完全恢复时,备份数据文件需要应用重做信息,而重做信息被记载到归档日志和重做日志中。通过比较备份文件的SCN 值和日志历史记载的SCN 值范围,ORACLE 可以确定要应用的归档日志和重做日志。

通过查询动态性能视图V$LOG_HISTORY,可以显示特定重做线程的日志历史记录。

SQL> select * from v$log_history;

     RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TIME     NEXT_CHANGE# RESETLOGS_CHANGE# RESETL
---------- ---------- ---------- ---------- ------------- -------------- ------------ --------------
         1  664106849          1          1        534907 30-8月 -08           565110            534907 30-8月 -08
         2  664107081          1          2        565110 30-8月 -08           573749            534907 30-8月 -08
         3  664194031          1          3        573749 30-8月 -08           600444            534907 30-8月 -08
         4  664283991          1          4        600444 31-8月 -08           641616            534907 30-8月 -08
         5  664325856          1          5        641616 01-9月 -08           667530            534907 30-8月 -08
         6  664325858          1          6        667530 01-9月 -08           667532            534907 30-8月 -08
         7  664325940          1          7        667532 01-9月 -08           667657            534907 30-8月 -08
         8  664326412          1          8        667657 01-9月 -08           668025            534907 30-8月 -08

 

6,检查点

检查点(Checkpoint)是一个数据库事件,它用于同步数据库的所有数据文件、控制文件和重做日志。当发出检查点时,后台进程CKPT 会将检查点时刻的SCN 写入到控制文件和数据文件头部,同时会促使后台进程DBWR 将所有脏缓冲区数据写入到文件中。当ORACLE 发出检查点时,CKPT 会促使DBWR 开始工作,而DBWR 又会促使LGWR 开始工作。因为当发出检查点时CKPT、DBWR、LGWR 同时工作,所以数据文件、控制文件和重做日志的SCN 完全一致,从而使得三种数据库文件保持完全同步。

注意:当执行COMMIT 操作时,只有后台进程LGWR 会将事务变化写入到重做日志,而后台进程DBWR 只有在检查点时刻才会将脏缓冲区数据写入到数据文件。

在以下情况中后台进程CKPT 会发出检查点:

  • 日志切换。当当前日志组写满之后,后台进程LGWR 会进行日志切换,当进行日志切换时,系统会促使后台进程CKPT 发出检查点。
  • 关闭数据库。当执行SHUTDOWN NORMAL、SHUTDOWN TRANSACTIONAL、SHUTDOWN IMMIEDIATE 等命令关闭数据库时,后台进程CKPT 会发出检查点,并且只有在检查点完成之后才会关闭数据库。注意,SHUTDOWN ABORT 命令不会发出检查点。
  • 手工检查点。当执行数据库备份时,为了使脏缓冲区数据写入数据文件,DBA 可以执行ALTER SYSTEM CHECKPOINT 强制后台进程CKPT 发出检查点。
  • 通过设置初始化参数据 FAST_START_MTTR_TARGET 控制检查点,该初始化参数用于指定例程恢复的最大时间。当设置了 FAST_START_MTTR_TARGET 参数之后,ORACLE 会根据该参数自动调节检查点。